环境
- Win10
- Qt Creator 4.8.0 (Enterprise) MSVC64_bit
- Anaconda Python3.7 64_bit
执行Python脚本
- 将Python集成到Qt中
工具->选项->环境->外部工具,添加->添加目录 (双击可任意更改名称这里更改为RunPy)->添加工具(双击可任意更改名称这里更改为Python3)。点击Python3,配置执行档、参数等配置:
执行档:python的安装目录,我这里是(F:\Anaconda3.5\python.exe),你自己找到自己安装的python.exe目录
参数:%{CurrentDocument:FilePath}
工作目录:%{CurrentDocument:Path}
2. 测试一个Python脚本
在QT项目上新建一个python文件,然后点击 工具->外部->RunPy->Python3,运行脚本即可。
c++中调用Python脚本
- 导入静态库
项目文件下右键–添加库–然后外部库,剩下的如下图所示:
2. 新建python文件放在和QT的EXE文件在同一目录下
3. 测试代码
最后记得qmake, 然后构建,最后运行。
- main.cpp
#include <Python.h>
Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.argv = ['python.py']");
PyRun_SimpleString("sys.path.append('./')");
PyObject* pModule = PyImport_ImportModule("dsdfs");
if (!pModule)
{
qDebug()<<"Cant open python file!\n";
}
qDebug()<<"file of python ac been opened";
PyObject* pFunhello= PyObject_GetAttrString(pModule,"hhh");
if(!pFunhello){
qDebug()<<"Get function hello failed";
}
//调用temperImg函数
PyObject_CallFunction(pFunhello,NULL);
//结束,释放python
Py_Finalize();
常遇到的坑
- 找不到Python.h
添加静态链接库
- error: C2238: 意外的标记位于“;”之前
如果修改了文件,一定需要保存文件。 然后还需要执行qmake, 构建,运行步骤。
- error: expected unqualified-id before ‘;’ token
由于QT中定义了slots作为关键了,而python3中有使用slot作为变量,所以有冲突。打开object.h文件,如下图进行修改即可。
- 无法打开python文件
python文件放在和QT的EXE文件在同一目录下即可。
-
不要将python文件命名为test.py或将函数命名为fun(),运行会报错找不到.py文件。
-
error: LNK1104: 无法打开文件“python37_d.lib”
include文件夹下找到pyconfig.h文件,将python37_d.lib更改为python37.lib
7. numpy版本过高导致环境错误,建议使用numpy1.16.0
8. 提示你找不到 python37_d.lib 怎么办?
把libs文件夹下的python37.lib文件,重新拷一份回来并且重命名为python37_d.lib就行了.
9. anaconda的环境配置一定要先配置好,不然python相关库将会导不进去。
记得在 用户变量的path (不是系统变量)中添加以下路径:D:\Anaconda3;D:\Anaconda3\Library\mingw-w64\bin;D:\Anaconda3\Library\usr\bin;D:\Anaconda3\Library\bin;