文章开头,请大家注意一点:
- 开始搭配环境之前,请大家完成对自己电脑位数的查看【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;
}
文章来源:https://www.toymoban.com/news/detail-820362.html
运行代码,完成项目配置
文章来源地址https://www.toymoban.com/news/detail-820362.html
到了这里,关于C++(Qt)与Python混合编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!