区块链技术博客
www.b2bchain.cn

Qt调用Python详细过程

这篇文章主要介绍了Qt调用Python详细过程的讲解,通过具体代码实例进行21210 讲解,并且分析了Qt调用Python详细过程的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=21210

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

文章目录

  • 一、创建控制台工程
  • 二、添加Python文件
  • 三 、添加Python库
  • 四、调用Python模块
  • 五、移动文件
  • 六、运行结果
  • 七、错误总结及解决办法

一、创建控制台工程

Qt调用Python详细过程


二、添加Python文件

Qt调用Python详细过程


编写Python代码,项目结构如下图示:

Qt调用Python详细过程


三 、添加Python库

在工程文件中加上Python安装路径下的includelibs路径:

Qt调用Python详细过程

INCLUDEPATH += C:UsersAdministratorAppDataLocalProgramsPythonPython37include LIBS += -LC:UsersAdministratorAppDataLocalProgramsPythonPython37libs -lpython37 //注意:-L 和 PATH 之间不能有空格 

注意:此处必须根据自己的安装情况做修改

Qt调用Python详细过程


四、调用Python模块

打开main.cpp,做如下修改:

#include <QCoreApplication> #include <Python.h> #include <iostream>  using namespace std;  int main(int argc, char *argv[]) {     QCoreApplication a(argc, argv);      Py_Initialize(); //初始化     if ( !Py_IsInitialized() ) //如果初始化失败         return -1;      PyObject* pModule = PyImport_ImportModule("test_py");  // 这里的test_py就是创建的python文件     if (!pModule) //如果获取模块指针失败     {         cout<< "Can't open python file!n" << endl;         return -1;     }     //方法一:获取函数指针     PyObject* pFunhello= PyObject_GetAttrString(pModule,"hello");  // 这里的hellow就是python文件定义的函数     //方法二:获取函数指针     /*PyObject* pDict = PyModule_GetDict(pModule);     if (!pDict)     {         printf("Cant find dictionary.n");         return -1;     }     PyObject* pFunhello = PyDict_GetItemString(pDict, "hello");*/      if(!pFunhello) //如果获取函数指针失败     {         cout<<"Get function hello failed"<<endl;         return -1;     }     PyObject_CallFunction(pFunhello,nullptr); //调用Python函数     Py_Finalize(); //调用结束,销毁     return a.exec(); }  

五、移动文件

编写完上述代码之后,直接运行,会得到:

Can’t open python file!

要保证Qt可执行文件与Python源文件在同一级目录下,方可正常运行

所以将工程下的test_py.py复制到构建目录下的debug文件夹中:

Qt调用Python详细过程


六、运行结果

Qt调用Python详细过程


七、错误总结及解决办法

错误1:找不到Python.h

出现原因: 因为我们在c++中使用这个了头文件,因此出现了找不到python.h
解决办法: 在.pro文件中添加python的头文件以及静态链接库,参考三


错误2

PyType_Slot *slots; object.h(445) : error C2059: 语法错误:“;” object.h(445) : error C2238: 意外的标记位于“;”之前 

解决办法:把slots改成slots1,Python将slots作为变量,而Qt将slots作为关键字,所以冲突了,再次编译该问题就没有了


错误3
Qt调用Python详细过程

解决办法:简单粗暴,直接注释掉

本文转自互联网,侵权联系删除Qt调用Python详细过程

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Qt调用Python详细过程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们