目录

Qt-Creator-与Python混合编程配置

Qt Creator 与Python混合编程配置

第一步 创建Qt工程

https://i-blog.csdnimg.cn/blog_migrate/e02570826dd6eb5e7e67892278d4bbff.png

第二步 在项目.pro文件下添加python解释器安装路径

https://i-blog.csdnimg.cn/blog_migrate/286390a3cb0fab4df7440680a8ee2de0.png

添加代码如下,大家可复制后更改python版本以及安装路径

INCLUDEPATH += C:\Python\include
LIBS += -LC:\Python\libs -lpython311

第三步 给项目添加Python文件

https://i-blog.csdnimg.cn/blog_migrate/d98dd3108b106ea736bee284bff6b3d7.png

https://i-blog.csdnimg.cn/blog_migrate/1e08abbad9fc55d40b25b30f53e4f517.png

第四步 编写python代码验证安装【简单案例】

在创建的python文件里边写入下面代码:

def add(a, b):
    return a, b

https://i-blog.csdnimg.cn/blog_migrate/c062eb2efb9b61646ac40c532acf7010.png

在.h文件里边加入下面代码:【可以自己创建,我用的是创建项目生成的.h文件】

#include <Python.h>
#include <iostream>
#include <QDebug>

https://i-blog.csdnimg.cn/blog_migrate/47500ab2092bf6145fdf9c578646c26a.png

在.h文件对应的.cpp文件里边的函数内加入以下代码:【析构函数不变】

    //Python初始化
    Py_Initialize();
    if( !Py_IsInitialized() )
        qDebug()<<"初始化失败";

    //导入sys模块设置模块地址
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");

    //创建模块指针
    PyObject* pModule = PyImport_ImportModule("Py_Module");
    if (!pModule)
        qDebug()<<"获取模块指针1失败";

    //创建函数指针
    PyObject* pFunc= PyObject_GetAttrString(pModule,"add");
    if(!pFunc)
        qDebug()<<"获取函数指针2失败";

    //创建函数参数,方法1
    PyObject* pPara = PyTuple_New(2);        // 2个参数
    PyTuple_SetItem(pPara, 0, Py_BuildValue("i",1));  //参数1为int型 1
    PyTuple_SetItem(pPara, 1, Py_BuildValue("i",2));  //参数2为int型 2
    //pPara = Py_BuildValue("(i,i)",1,2); //连写方式

    //创建函数参数,方法2
    PyObject* args = PyTuple_New(2);        // 2个参数
    PyObject* arg1 = PyLong_FromLong(4);    // 参数一设为4
    PyObject* arg2 = PyLong_FromLong(3);    // 参数二设为3
    PyTuple_SetItem(args, 0, arg1);
    PyTuple_SetItem(args, 1, arg2);

    //调用Python函数,传入元组参数pPara
    PyObject *FuncBack = PyObject_CallObject(pFunc,pPara);
    //PyObject_CallObject(pFunc,nullptr); //无参数调用

    //FuncBack是返回值指针,转换获取返回值
    int res = 0;
    PyArg_Parse(FuncBack,"i",&res);
    qDebug()<<"返回值: "<<res;

    //调用结束,销毁
    Py_Finalize();

https://i-blog.csdnimg.cn/blog_migrate/9a139760806acc03bb77bb179517ef81.png

https://i-blog.csdnimg.cn/blog_migrate/fbd31cb71b7480a433b3b47a293c6ab0.png

点击运行

https://i-blog.csdnimg.cn/blog_migrate/8077b124a7db7ba9b797483ae0fcedbd.png

特别注意

一、导入python.h文件报错

https://i-blog.csdnimg.cn/blog_migrate/9fa04663c2c53b814fb6e3344fa50e36.png

解决方法

object.h文件报错一般是因为宏定义冲突的问题,我们在文件报错所在地方加上一行代码取消宏定义就可以了

#undef slots  //取消宏定义

https://i-blog.csdnimg.cn/blog_migrate/feab393904a0a321541f6b5450aa32d6.png

二、运行后提示找不到.py文件路径或导入.py文件报错

解决方法

将项目下的.py文件复制到项目debug文件夹下

我的.py文件位置:C:\App\Qt\Qt_project\qt_python1

我的项目debug文件夹位置:C:\App\Qt\Qt_project\build-qt_python1-Desktop_Qt_5_14_2_MinGW_64_bit-Debug\debug

https://i-blog.csdnimg.cn/blog_migrate/6918fe59621b307c0ffa3e0dc46fb088.png

https://i-blog.csdnimg.cn/blog_migrate/35e82dbceb7ed813a2839cb03d613140.png