Python编程环境(2)——Qt安装及配置

本文详细介绍Qt5的安装步骤及配置方法,包括Qt安装程序文件获取、安装路径选择、不同编译器(MSVC、MinGW)设置,以及解决安装过程中遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Qt安装

关于QT的系统概述

Qt安装程序文件及网址

QT安装路径及安装选项

strawberry perl组件安装

Qt编译器设置(MSVC、MinGW)


 


主文:Python编程环境Anaconda3+Qt5+PyQt5+Eric6+Eclipse+PyDev https://blog.youkuaiyun.com/sjpljr/article/details/79302914


Qt安装


关于QT的系统概述

非常全面,非常好  http://www.mamicode.com/info-detail-1361070.html

QT初步认识 -  https://blog.youkuaiyun.com/sjpljr/article/details/79262193

Qt安装程序文件及网址

Qt 5.9 安装包与之前版本相比,不再区分 VS 版本和 MinGW 版本。

Qt下载:http://download.qt.io/archive/qt/
该下载网页最下边是镜像网站链接:List of official Qt-project mirrors,下载不受限制。

清华大学镜像比较好用:http://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qt,Mirrors URLs 列表选中HTTP方式,选中相应版本Qt下载。这里暂选qt-opensource-windows-x86-5.9.7版本,是个对应Windows系统32bit版本。

QT安装路径及安装选项

环境:32bit Windows计算机系统,已安装Anaconda3注意Windows 位数与Qt 位数的匹配

1、Qt安装路径:D:\Qt
2、设置选项

在 Qt5.9 一项中,如果你是使用 MinGW 进行编译,请务必选中 MinGW 模块。而如果你希望调用 VS 的编译器进行编译,则需要勾选对应的 VS 模块。如果进行安卓开发,则勾选安卓模块。

其余一些模块,根据自身需要勾选。这里介绍下Qt WebEngine 和三个后面带TP的模块项。Qt WebEngine是谷歌开源的 Web 浏览器引擎模块,而带 TP 的模块则表示此模块目前是技术预览版。

 

3、设置:设置选项中组件须根据Windows系统、编译器等进行设置。

3.1 如果是Windows 32-bit系统,则编译器组件必须选择32-bit类型(Windows 32-bit系统,安装不兼容的64-bit编译器插件引发安装报错。)。

否则,可能提示诸如以下错误提示:安装进程(qt.qt5.597.win64_msvc2017_64)运行期间出现错误:
The output of
D:\Qt\Qt5.9.7\5.9.7\msvc2017_64\bin\qmake.exe -query
is not parseable.Please file a bugreport with this dialog https://bugreports.qt-project.org.
output:""

如果Windows 64-bit系统,编译器组件可选择32-bit或64-bit。

3.2 建议编译器根据应用只选择MSVC或MinGW中的一种。实际安装中,同时勾选两种编译器,安装Qt正常,但在安装Eric6时提示

例:当前win7 64-bit系统,安装eric6过程中Qt安装时的环境。Anaconda3-5.3.0-Windows-x86,Qt 5.9.7,PyQt在线安装,eric6-18.11。经验证可正常安装Eric6。

Qt 5.9.7安装——设置——去掉MSVC2013 64-bit(还有MSVC2015 64-bit、MSVC2017 64-bit、UWP x64(MSVC 2015\2017))等全部64-bit Qt 5.9.7 Prebuilt Components for MSVC 2013 64-bit选项组件。

以上设置方式成功安装

特别注意:以下设置方式(同时勾选安装MSVC、MinGW两种编译器)虽然安装Qt成功,但安装eric6-18.11中提示错误。

错误提示如下:

......
Found QtWidgets
An internal error occured.  Please report all the output of the program,including the following traceback, to eric-bugs@eric-ide.python-projects.org.
......
File "install.py", line 1517, in doDependancyChecks
__import__(altModule)
ValueError: PyCapsule_GetPointer called with incorrect name

更换为eric6-17.04.1版本,居然安装成功了。但eric6.bat仍然异常:黑CMD窗口一闪而过,调试很长时间依然无法启动。

 

3、设置——tool选项:勾选设置。

工具项(Tools)的选择。

第一项是CDB的调试器,如果你仅使用 MinGW进行编译,则此项可以不选。它主要用于VS。

第二项虽然名字带 MinGW,但只是用于交叉编译的(交叉编译即在某一平台上编译用于其他平台的程序),如果用不到,也可以不选。

至于第三项,那是用于 Perl 的。如果你电脑中本身没有安装 Perl,那是装不上的。

选择完成后,继续点击“下一步”。

strawberry perl组件安装

安装QT过程中,提示D:\Qt\Qt5.9.7\Tools\Perl52213_32\strawberry-perl-5.22.1.3-32bit.exe程序不能安装。

手动操作:启动CMD,设置D:\Qt\Qt5.9.7\Tools\Perl52213_32为当前目录,直接手动安装strawberry-perl-5.22.1.3-32bit.exe。

安装好之后查看环境变量,发现环境变量中也有了strawberry。于是问题得到解决。


Qt编译器设置(MSVC、MinGW)

Qt 中有两种方式编译,一种MSVC,一种是MinGW 。

Qt Creator在第一次启动时会扫描系统变量,并在系统变量中查找编译器、Qt版本、调试器以及Qmake,并将结果保存在配置文件中,再次启动时不会重新扫描并更改这些设置。当编译器等发生变化时,需要将Qt Creator的配置文件删除以强制其在启动时重新扫描系统环境,并重新设置构建套件的相关配置。

Qt Creator的配置文件存放位置为:C:\Users\%USERNAME%\AppData\Roaming\QtProject。将路径粘贴在CMD中运行。

错误提示:有些版本Qt安装包未含MSVC,安装Qt时未安装MSVC编译器。导致Qt项目运行时提示:Qt Creator 需要设置一个编译器来构建。在构建套件选项里设置一个编译器

通过Qt程序信息识别:打开Qt Creator——菜单的“帮助”栏——关于Qt Creator。

解决方法:如果是MSVC编译器版本的Qt,安装与Qt的编译器版本一致的编译器。已经验证安装相应版本VS,需要选项安装C++运行库。其它方法:直接安装与QT安装程序要求的MSVC编译器,应该也是可以的。

 

1、MSVC编译器:

MSVC,就是微软(MS)的VC运行库(Visual C++的运行库)。MSVC运行库版本有2003、2005、2010等,分32位和64位。
编程使用微软的运行库,减少了软件的编码量,却降低了兼容性。软件运行的时候,需要这些运行库。

安装:IT天空一键驱动里的VC运行库一键可安装完毕。VS2015企业版:http://www.cncrk.com/downinfo/146696.html,www.itellyou.cn网站下载VS各版本、Windows等软件。

VS是Visual Studio,它是微软提供的一个工具集。VS2010可以支持C/C++、VB、JAVA、C##编程。

VS2010选择C/C++编程语言,那么VS就成为能够进行C/C++编程的平台(俗称VC2010)。VC2010只是一个独立的C/C++的开发工具,比较著名的是VC6.0,现在的VC2010其实就是VC10。修改VS初始化设置,选择别的编程语言,也可成为“VB2010”等等。

MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
MSVC++ 9.0  _MSC_VER == 1500 (Visual Studio 2008)
MSVC++ 8.0  _MSC_VER == 1400 (Visual Studio 2005)
MSVC++ 7.1  _MSC_VER == 1310 (Visual Studio 2003)
MSVC++ 7.0  _MSC_VER == 1300
MSVC++ 6.0  _MSC_VER == 1200
MSVC++ 5.0  _MSC_VER == 1100

2、MinGW编译器

MinGW软件本身开源,下载网址:http://sourceforge.net/projects/mingw/
(1)MinGW,是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),该库在所有的 NT OS 上有效,使用基本运行时,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。

(2)GNU是"GNU is Not Unix"的递归缩写,Stallman宣布GNU应当发音为Guh-NOO以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new相同)。UNIX是一种广泛使用的商业操作系统的名称。由于GNU将要实现UNIX系统的接口标准,因此GNU计划可以分别开发不同的操作系统部件。
GNU是一个类Unix操作系统。它是由多个应用程序、系统库、开发工具乃至游戏构成的程序集合。GNU的开发始于1984年1月,称为GNU工程。GNU的许多程序在GNU工程下发布;我们称之为GNU软件包。
类Unix操作系统中用于资源分配和硬件管理的程序称为“内核”。GNU所用的典型内核是Linux。该组合叫做GNU/Linux操作系统。GNU/Linux为几百万用户所使用,然而许多人错误地称之为“Linux”。GNU自己的内核,The Hurd,开始于1990年(早于Linux)。

(3)GCC 原名为 GNU C 语言编译器(GNU  C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。

GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。[2]  GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。

(4)GPL是General Public License的缩写,通用公共授权。它并非由自由软件基金会所发表,亦非使用GNU通用公共授权的软件的法定发布条款─只有GNU通用公共授权英文原文的版本始具有此等效力。

 

 

### Qt 调用 Python 混合编程 示例教程 #### 1. 配置开发环境 为了在 Qt 中成功调用 Python,需要配置好开发环境。这通常涉及设置 `.pro` 文件中的路径以及链接必要的库。 以下是典型的 `.pro` 文件配置方式: ```plaintext INCLUDEPATH += -I F:\Python38\include LIBS += -LF:\Python38\libs -lpython38 ``` 上述代码片段展示了如何将 Python 的头文件目录和库文件加入到项目中[^4]。 --- #### 2. 创建简单的混合编程示例 ##### (a) 编写 Python 脚本 假设有一个名为 `example.py` 的 Python 脚本,其功能是返回字符串 "Hello from Python!"。 ```python def greet(): return "Hello from Python!" ``` 此脚本可以作为测试目标来验证 Qt 是否能够正常调用它。 --- ##### (b) 使用 QProcess 执行外部 Python 脚本 通过 `QProcess` 类可以在 Qt 应用程序中启动并控制子进程,从而运行 Python 脚本。 下面是一个完整的 C++ 实现例子: ```cpp #include <QCoreApplication> #include <QProcess> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QProcess process; QStringList arguments; // 设置要执行的 Python 解释器及其参数 QString program = "F:/Python38/python.exe"; // 替换为实际的 Python 可执行文件路径 QString scriptPath = "./example.py"; arguments << scriptPath; QObject::connect(&process, &QProcess::readyReadStandardOutput, [&]() { QByteArray output = process.readAllStandardOutput(); qDebug() << "Python Output:" << output; }); QObject::connect(&process, &QProcess::errorOccurred, [&](QProcess::ProcessError error) { qDebug() << "Error occurred:" << error; }); process.start(program, arguments); if (!process.waitForStarted()) { qDebug() << "Failed to start the process."; return -1; } if (!process.waitForFinished()) { qDebug() << "Process failed to finish."; return -1; } return app.exec(); } ``` 在此代码中,`QProcess` 被用来启动 Python 进程,并捕获标准输出流以显示来自 Python 脚本的结果[^1]。 --- ##### (c) 利用嵌入式解释器直接调用 Python 函数 另一种方法是利用 Python 嵌入式 API,在 C++ 程序内部加载 Python 并调用函数。 以下是一段演示代码: ```cpp #include <Python.h> #include <QString> #include <QDebug> void call_python_function() { Py_Initialize(); // 初始化 Python 解释器 PyObject* pModule = nullptr; PyObject* pFunc = nullptr; PyObject* pValue = nullptr; try { const char* moduleName = "example"; const char* funcName = "greet"; pModule = PyImport_ImportModule(moduleName); // 导入模块 if (!pModule) throw std::runtime_error("Cannot import module"); pFunc = PyObject_GetAttrString(pModule, funcName); // 获取函数对象 if (!PyCallable_Check(pFunc)) throw std::runtime_error("Function is not callable"); pValue = PyObject_CallObject(pFunc, NULL); // 调用函数 if (!pValue) throw std::runtime_error("Call function failed"); QString result = QString(PyUnicode_AsUTF8(PyObject_Str(pValue))); qDebug() << "Result from Python:" << result; } catch (const std::exception& e) { qDebug() << "Exception caught:" << e.what(); } Py_XDECREF(pValue); Py_XDECREF(pFunc); Py_DECREF(pModule); Py_Finalize(); // 关闭 Python 解释器 } int main(int argc, char *argv[]) { Q_UNUSED(argc); Q_UNUSED(argv); call_python_function(); return 0; } ``` 这段代码实现了更深层次的集成——C++ 和 Python 之间的交互更加紧密[^3]。 --- #### 3. 将 Python 功能封装为插件 如果希望构建灵活的应用架构,则可考虑将 Python 脚本设计为插件形式。这种方式允许开发者仅需修改 Python 插件而无需重新编译整个应用程序即可更改核心逻辑[^2]。 例如,定义一组固定的接口供 Python 插件实现,随后由 Qt 加载这些插件并动态调用其中的方法。 --- #### 4. 处理错误与调试 当遇到问题时,可以通过连接信号槽机制监听错误消息以便快速定位原因。例如,使用如下代码捕捉 Python 错误日志: ```cpp connect(PythonQt::self(), SIGNAL(pythonStdErr(const QString&)), this, SLOT(stdErr(const QString&))); ``` 该语句会将所有从 Python 发送的标准错误信息传递给指定槽函数进行进一步分析。 --- ### 总结 以上介绍了三种主要的技术手段用于完成 QtPython 的混合编程任务:借助于 `QProcess` 启动独立的 Python 子进程;采用嵌入式的 Python 解析引擎直接操作 Python 对象;或者把 Python 组件当作扩展点引入应用体系结构之中。每种方案各有优劣,请依据具体需求选取最合适的策略实施部署。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值