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

这篇具有很好参考价值的文章主要介绍了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/

按如下操作进行:

qt python 混合编程,python,qt,c++

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

 qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

 第二节 安装旧版本Python

安装exe文件

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

按如下操作进行:

qt python 混合编程,python,qt,c++

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

qt python 混合编程,python,qt,c++

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

 qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

第二章 安装QT

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

windows用户选择下图文件安装

qt python 混合编程,python,qt,c++

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

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

 qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

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

第三章 Qt内配置Python

新建Qt项目

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

添加Python依赖

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

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

qt python 混合编程,python,qt,c++

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

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

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

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

qt python 混合编程,python,qt,c++

添加Python文件到项目中

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

qt python 混合编程,python,qt,c++

 qt python 混合编程,python,qt,c++

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

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

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

        原文件生成位置

qt python 混合编程,python,qt,c++

文件复制位置

qt python 混合编程,python,qt,c++

文件代码如下:

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

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

# if __name__ == "__main__":
#     pass

qt python 混合编程,python,qt,c++

第二步:对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

qt python 混合编程,python,qt,c++

第三步:对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;
}

qt python 混合编程,python,qt,c++

 运行代码,完成项目配置

qt python 混合编程,python,qt,c++文章来源地址https://www.toymoban.com/news/detail-820362.html

到了这里,关于C++(Qt)与Python混合编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 和 C++ 混合编程:pybind11 使用

    我们通常在 Python 上进行算法开发,因为 Python 编程方便,易于快速验证算法。而在验证算法正确后,如果对运行效率有更高要求的话,则会将计算密集的模块使用 C/C++ 重新实现,来达到代码运行效率加速的效果。所以,这就涉及到了 Python 和 C++ 混合编程,而在这方面 pybin

    2024年02月08日
    浏览(44)
  • visual stdio c++调用python混合编程

    关于环境创建可以参考https://blog.csdn.net/qq_36559788/article/details/123174309 这里python我用的是anaconda里的python38 ,并且没有debug库,所以我只用了release库 在vs中设置项目属性,添加 包含目录 以及 附加库目录 ,注意都是在release模式下添加的 在main.cpp中添加头文件 添加代码 编译运行

    2024年02月01日
    浏览(40)
  • 【QT进阶】Qt Web混合编程之html、 js的简单交互

    往期回顾 【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用(图文并茂超详细介绍)-CSDN博客 【QT进阶】Qt Web混合编程之QWebEngineView基本用法-CSDN博客 【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView(图文并茂超详细版本)-CSDN博客【QT进阶】Qt Web混合编程之VS2019 CEF的编译

    2024年04月22日
    浏览(31)
  • C++ 混合Python编程 及 Visual Studio配置

    接手了一个C++应用程序,解析csv和生成csv文件,但是如果要把多个csv文件合并成一个Excel,分布在不同的Sheet中,又想在一次运行中完成,不想说运行完C++ 的App后,再调用一个Python脚本或程序,这需要两步操作 根据安装的Visual Studio 的版本,我安装的是64-bit的。 如何查看当前

    2024年02月13日
    浏览(43)
  • Qt之qml和widget混合编程调用

    首先是创建一个widget项目 然后需要添加qml和quick的插件使用 QT += quickwidgets qml 接着要在界面上创建一个quickwidget和按钮 创建一个c++对象类 QObjectQml cpp实现文件 注册c++对象到系统中 接着c++的界面对象中调用即可 qml文件的实现如下: 运行结果如下:

    2024年02月14日
    浏览(37)
  • 关于一些C++、Qt、Python方面的术语

    杂鱼之前纯粹用python没细致理解过的术语整理一下,常看常新( 定义是指给一个实体分配内存空间,以便在程序中使用。在C++和Python中,这个实体可以是变量、函数或类。在C++中,定义通常是在声明之后实现实体的内容。 例如 f(int a, int b) 声明是指在程序中声明实体的存在,

    2024年02月15日
    浏览(40)
  • Qt C++中调用python,并将软件打包发布,python含第三方依赖

    工作中遇到qt c++调用我的python 代码,并且想要一键打包,这里我根据参考的以及个人实践的结果来简单实现一下。 环境:windows系统,QT Creater 4.5, python 3.8(anaconda虚拟环境) 1.创建QT工程 中间省略3个步骤图。创建完成后,如图。 首先提示各位从python过来的同仁 ,QT中有时

    2024年01月20日
    浏览(49)
  • Qt固件映像 Raspberry Pi 嵌入式C++(Qt)编程

    在我们的游戏中,我们有一个桨、一个球和三十块砖。 计时器用于创建游戏周期。 我们不处理角度,我们只是改变方向:上、下、左、右。 Qt5 库是为创建计算机应用程序而开发的。尽管如此,它也可以用来创建游戏。开发计算机游戏是了解有关 Qt5 的更多信息的好方法。

    2024年01月19日
    浏览(43)
  • [QT编程系列-3]:C++图形用户界面编程,QT框架快速入门培训 - 2- QT程序的运行框架:HelloWorld、常见控件、对象树原理

    目录 2. QT程序的运行框架 2.1 Hello World程序框架 2.2 QT Designer初识 2.3 用QT Designer设计用户登录界 上述示例代码中,首先根据应用程序的需求使用 QCoreApplication 或 QApplication 定义 app 对象。如果你的应用程序需要图形界面,则使用 QApplication,否则使用 QCoreApplication。然后,你可以

    2024年02月15日
    浏览(52)
  • [QT编程系列-7]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义工具栏、状态栏、快捷键、图标

    目录 3. QT窗体设计 3.2 自定义工具栏 3.2.1 目标 3.2.2 实现过程 3.2 自定义状态栏 3.2.1  目标 3.2.2  过程 3.3 自定义动作快捷键 3.4 自定义图标 在Qt中,ToolBar(工具栏)是一种常见的GUI元素,用于提供应用程序的常用工具按钮和操作。工具栏通常包含一系列图标按钮,用于执

    2024年02月15日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包