C++(Qt)与Python混合编程

文章开头,请大家注意一点:

  • 开始搭配环境之前,请大家完成对自己电脑位数的查看【32位/64位】
  • 本篇博客适用于windows64位版本安装。当然了,32位的友友也可以对照着配置!

本篇教程所用环境如下:

  • windows11(64位)
  • Qt 6.4
  • Python 3.8.6

 第一章 安装Python

【由于本人已安装python版本为3.8.6,不想重装,因此安装部分截取网络图像进行演示】

【如有侵权情况请私聊本人删除】

第一节 安装最新版本Python

安装exe文件

进入Python官网:https://www.python.org/downloads/

按如下操作进行:

 点击安装后的exe文件进行安装

 

在这里插入图片描述

 第二节 安装旧版本Python

安装exe文件

进入Python旧版本安装网址:Download Python | Python.org

按如下操作进行:

 点击后下拉选择下图选项进行安装【注意此版本为windows的64位的python】【32位请选x86】

 点击安装后的exe文件进行安装

 

在这里插入图片描述

第二章 安装QT

此处提供qt6.4版本(64位)安装网址:Index of /official_releases/online_installers (qt.io)

windows用户选择下图文件安装

 按下图操作即可【备注:qt在线安装为外网安装,过程可能会有些慢】

 

 之后点击"下一步->安装"就可以了

第三章 Qt内配置Python

新建Qt项目

添加Python依赖

 完成库文件添加后,.pro文件最下边会出现下面语句

 我们应该查看下文件python安装路径下的libs文件里边是否有python38d这个文件,如果没有,请修改:

接下来,我们要添加python执行文件到pro文件中,添加如下代码到pro文件中 

INCLUDEPATH += D:\python386\include
LIBS += -LD:\python386\libs -lpython38

添加Python文件到项目中

 

 编写代码,实现qt下c++程序调用python文件

第一步:对创建的Py_Module.py文件进行编写 

        注意:创建完python文件后我们需要把文件拷贝到对应的运行文件夹里边,不然会报错检索不到文件

        原文件生成位置

文件复制位置

文件代码如下:

# This Python file uses the following encoding: utf-8

def prin():
    return "hello"
def add(a,b):
    return a+b

# if __name__ == "__main__":
#     pass

第二步:对mainwindow.h文件进行编写

文件代码如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "D:\python386\include\Python.h"

#include<iostream>
#include<QDebug>

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

第三步:对mainwindow.cpp文件进行编写

文件代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //Py_SetPythonHome((const wchar_t *)(L"D:/ThePaK/Python3.8"));
    Py_Initialize();
    if( !Py_IsInitialized() )
        qDebug()<<"初始化失败";
        //导入sys模块设置模块地址
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");
    //QString setSysPath = QString("sys.path.append('%1')").arg(QCoreApplication::applicationDirPath());
    //PyRun_SimpleString(setSysPath.toStdString().c_str());
    //创建模块指针
    PyObject* pModule = PyImport_ImportModule("Py_Module");
    if (!pModule)
        qDebug()<<"获取模块指针失败";
    //创建函数指针
    PyObject* pFunc= PyObject_GetAttrString(pModule,"add");
    PyObject* pFunc2= PyObject_GetAttrString(pModule,"prin");
    if(!pFunc)
        qDebug()<<"获取函数指针1失败";
    if(!pFunc2)
        qDebug()<<"获取函数指针2失败";
    //无参函数
    PyObject* pPara2 = PyObject_CallFunction(pFunc2, 0);
    char* res3;
    PyArg_Parse(pPara2, "s", &res3);
    qDebug()<<"print(f):"<<res3;
    //创建函数参数,方法1
    PyObject* pPara = PyTuple_New(2);        // 2个参数
    PyTuple_SetItem(pPara, 0, Py_BuildValue("i",7));  //参数1为int型 1
    PyTuple_SetItem(pPara, 1, Py_BuildValue("i",2));  //参数2为int型 2
    //pPara = Py_BuildValue("(i,i)",1,2); //连写方式
    /*
    PyObject* pPara = PyTuple_New(2);        // 2个参数
    PyTuple_SetItem(pPara, 0, Py_BuildValue("s","Hello"));  //参数1为String型 "Hello"
    PyTuple_SetItem(pPara, 1, Py_BuildValue("s","World!"));  //参数2为String型 "World!"
    */
    //创建函数参数,方法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,args);
    //PyObject_CallObject(pFunc,nullptr); //无参数调用
    //FuncBack是返回值指针,转换获取返回值
    int res = 0;
    PyArg_Parse(FuncBack,"i",&res);
    qDebug()<<"返回值: "<<res;
    //调用结束,销毁
    Py_Finalize();

}

MainWindow::~MainWindow()
{
    delete ui;
}

 运行代码,完成项目配置

  • 16
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Qt是一个跨平台的应用程序开发框架,常用于C++开发。Python是一种动态类型的脚本语言。混合编程指的是在一个项目中同时使用Qt/C++Python进行开发。 混合编程的好处是可以充分发挥QtPython各自的优势。Qt/C++可以提供高性能和可靠性,适用于底层开发和系统级编程Python则提供了简洁易懂、高效编程以及大量的第三方库,适用于快速开发和原型设计。 混合编程的打包过程可以分为以下几个步骤: 首先,需要安装相应的编译工具和开发环境,如QtC++编译器和Python解释器。确定使用的Qt版本与Python版本兼容。 其次,需要为C++部分编写Qt代码,并将其编译成dll或so动态链接库,以供Python调用。这需要使用Qt提供的相关工具和库进行编译和链接。 然后,使用Python的相关库(如PyQt或PySide)来调用C++部分的Qt代码,并将其与Python代码结合起来。这样,就可以实现Qt界面与Python逻辑的交互。 最后,将项目打包成可执行文件、二进制文件或安装包。这可以使用Qt提供的打包工具,如Qt Installer Framework,或者使用第三方工具和脚本来完成。 需要注意的是,在混合编程和打包过程中,需要仔细处理Qt的信号与槽机制与Python的回调机制之间的交互,以确保二者能够正常工作。 总之,Qt C++Python混合编程可以充分利用两者的优势,打包则需要注意兼容性和交互的处理。这种方式可以更灵活地开发应用程序,并能够适应不同的需求和平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值