QtCreator中C++调用python的方法
QtCreator中C++调用python的方法
软工课程的界面使用QT做的,而其中核心的情感预测是python写的,模块融合的时候需要C++和python混合编程。在配置的过程中踩了不少坑,特此记录警醒后人😭
1. 在qtcreator中创建 qt application
项目选择无所谓的,对是否成功配置没什么影响
2. 修改c++文件
修改main.cpp文件如下:
1 |
|
3. 修改.pro文件
pro
这里有两种方式进行修改:
方法一 添加外部库进行修改
1.右键项目名称添加库
2.选择外部库
3.库文件和包含路径如图所示
库文件是本地python文件夹下的lib文件,具体路径如图所示
包含路径是这样的
点击下一步,完成即可
此时你的.pro文件里增加了如下代码:
1 |
|
但在这其中有些代码中涉及的库文件是本地不存在的,所以需要进行修改。只保留LIBS和INCLUDEPATH的路径,其余的注释掉。如图所示
方法二 手动添加代码
在.pro文件的最后加上:
1 |
|
注意这些路径要改为自己python的路径
lpython310是libs文件夹下python310.dll库文件
4. 添加python文件
示例代码
1 |
|
5.构建运行程序
注意构建运行时一定要选对编译模式和对应机器的位数
(哥们选择的是64位和debug运行模式)
哥们的文件在32位gcc编译模式下就会报一堆错,切记切记!
至于选择debug还是release模式,网上参考的博客说release模式成功的可能性大。哥们两种模式都尝试了,全部构建成功。这个大伙自行斟酌。
此时程序会报一些错误,不要慌张,这些坑哥们都已经踩过了
在运行程序后,qt会自动构建debug文件夹
此时可以在项目中添加新文件,路径选择为debug文件夹,文件就是刚刚的python文件。换句话说,这一步就是将python文件放置于和exe文件相同的文件夹下。我的路径为
D:\my_code\QTDemo\Python&QT\SoftwareEngineering-NLP-Model\build-DEMO-Desktop_Qt_5_14_2_MinGW_64_bit-Debug\debug
你以为只添加python文件就够了吗?非也非也
网上的博客通常讲到这一步就结束了,我跟到这一步后发现自己的python文件依旧跑不起来,而且报错显示的是python路径问题,长这个样子。
仔细分析一下sys.path,发现所有路径文件中好像dll的库文件没有引入,故尝试将dll文件复制进debug文件夹,故障解决。呦吼!这些文件需要到下载的python文件夹中找。
需要提醒一点的是,在进行上面的修改后,需要保存文件。然后需要执行qmake,构建,运行步骤。这样整个工程才会保留这些更改重新开始构建。
可能遇到的问题及解决
1. 找不到python.h
原因是我们在c++中使用了这个头文件,但没有添加相应的python动态链接库
解决方法:内容详情请见修改.pro文件
2. error: C2238: 意外的标记位于“;”之前
原因是QT中定义了slots作为关键了,而python3中有使用slot作为变量,所以有冲突。
解决方法:在python的object.h中 slots冲突,因此修改object.h,我的object.h路径:
D:\software\python3.9.15\include\object.h
修改如下
3. 编译时没有错误,运行时出现“cant open python file!”
可能原因
1.是生成的exe文件和test_py.py文件不在同一个文件夹里,只要手动将test_py.py拷贝到exe文件同级目录下即可。
2.前面的调用只引入了内部package的python程序是可以的,但是如果需要调用外部的package,那么就会出现无法打开py文件的情况。
如果需要引入别的一些package的话,就需要将所需要的package文件复制到QT工程目录的debug文件夹下(根据自身情况选择debug或者release),例如我的工程项目需要引入numpy,keras和tensorflow的包,如下:
这些包来自于下载的python文件夹下,我的路径为:
D:\software\python3.9.15\Lib\site-packages
可以根据自己的工程需要进行添加
这玩意的配置就无限踩坑,还好最后成功啦!最后放上运行成功截图✨✨✨