1. Qt 自带编辑器 调用Python 

  2. Clion 编辑器    调用Python


前言:python 无所不能。代码简洁,易于维护,开发效率很快。就是运行速度太慢。

C++速度快,但是开发繁琐,没有python简洁,能做的事也没有这么多,

两者联合,各取优点,这将看你如何调度,C++ 和 python。


QT自带的编辑器网上很多教程。这里只是简单介绍一下。主要介绍Clion.

1.Qt 自带编辑器 调用Python

不要把事情想得要复杂-不要把事情想得要复杂-不要把事情想得要复杂-

在QT工程目录下.pro中添加两个路径。

一个是python include 目录,一个是 python链接库,注意路径不要有特殊符号

INCLUDEPATH += C:\Users\wu\AppData\Local\Programs\Python\Python310\include  #python  include 路径LIBS += -LC:\Users\wu\AppData\Local\Programs\Python\Python310\libs -lpython310  #python 链接库

找到python安装目录、

1,python include 目录。Python.h就在里面-C++会去里面找Python.h

不然 #include Python.h 的时候会报错、

2,python 链接库

路径添加完整以后,就可以在C++ QT 中调用python 代码。

当然也有更简单,更不容易出错的方式:

QT链接库的配置

如何使用:

建立一个main.py 文件放在 debug 文件夹中。和生成的exe 文件同级。

在main.py文件中,创建一个函数。一个类。顺便提一嘴。python10 新增C++中的 switch 语句。功能非常强大,可以去试试哦。传送地址: python switch介绍

言归正传

问题来了。如何在C++中调用python 的方法和类呢?自己看。自己研究。

注意点:#include Python.h 的时候要添加上下两行代码。解决冲突、

#include "mainwindow.h"
#include <QtDebug>#include <QApplication>#undef slots
#include "Python.h"
#define slots Q_SLOTSint main(int argc, char *argv[])
{QApplication a(argc, argv);Py_Initialize();   //初始化python模块PyRun_SimpleString("import sys");// 执行python importPyRun_SimpleString("sys.path.append('./')");// 添加python 查找路径if ( !Py_IsInitialized() ){return -1;// 如果初始化失败退出}PyObject *pModule = PyImport_ImportModule("main");//这里是要调用的文件名main.pyPyObject *func = PyObject_GetAttrString(pModule, "arg1");// main.py 中的方法名 arg1PyObject *args =  Py_BuildValue("ss", "hello", "world");// mian.py arg1方法需要两个参数。传给他PyObject *rets = PyObject_CallObject(func, args);// 返回值const char * returnStr = PyUnicode_AsUTF8(rets);qDebug()<<returnStr;PyObject *pyClass = PyObject_GetAttrString(pModule, "CP");//main.py 中的类名PyObject *pConstruct = PyInstanceMethod_New(pyClass);// 创建对象PyObject* pParams = PyTuple_New(2);// 对象的__init__初始化函数需要两个构造参数  所以写2PyTuple_SetItem(pParams, 0, Py_BuildValue("s", "hello"));// 这是第一个参数PyTuple_SetItem(pParams, 1, Py_BuildValue("s", "world"));// 第二个参数PyObject* pIns = PyObject_CallObject(pConstruct,pParams);// 返回值PyObject* pFunhello= PyObject_GetAttrString(pIns,"hello");// 对象中方法PyObject* pParams1 = PyTuple_New(1);// 对象中方法参数个数PyTuple_SetItem(pParams1, 0, Py_BuildValue("s","world"));// 对象中方法参数PyObject *FuncTwoBack = PyObject_CallObject(pFunhello, pParams1);//获取返回值const char * Str = PyUnicode_AsUTF8(FuncTwoBack);qDebug()<<Str;MainWindow w;w.show();return a.exec();
}

看着QT 自带的编辑器。有什么感触。我反正觉得每天在看屎。

还是看看 Clion 编辑器 吧。

Clion 编辑器    调用Python

和QT一样。需要添加路径。在Clion CMakeLists.txt 中添加两行代码。

注意链接库路径要写全名。路径不可特殊字符

重点:路径必须在  add_executable的前面添加,


#python  include 路径
include_directories(C:/Users/wu/AppData/Local/Programs/Python/Python310/include)
#python 链接库
link_libraries(C:/Users/wu/AppData/Local/Programs/Python/Python310/libs/python310.lib)

添加完以后,就可以使用python 了。对的就这么简单。

同样python .py文件放在 Debug 文件里,和exe 同级。

#include <QApplication>
#include "Oeabt.h"
#include "image.h"
#include <QDebug>#undef slots#include "Python.h"#define slots Q_SLOTSint main(int argc, char *argv[]) {system("chcp 65001"); //解决控制台中文乱码Py_Initialize();//初始化python模块PyRun_SimpleString("import sys");// python importPyRun_SimpleString("sys.path.append('./')"); // 添加python 查找路径if (!Py_IsInitialized()) {return -1;//初始化失败返回}PyObject *pModule = PyImport_ImportModule("main");//这里是要调用的文件名.pyPyObject *func = PyObject_GetAttrString(pModule, "arg1"); // 方法PyObject *args = Py_BuildValue("ss", "hello", "world");// 方法参数PyObject *rets = PyObject_CallObject(func, args);  // 返回值const char *returnStr = PyUnicode_AsUTF8(rets);qDebug() << returnStr;PyObject *pyClass = PyObject_GetAttrString(pModule, "CP"); // 对象PyObject *pConstruct = PyInstanceMethod_New(pyClass);//创建对象PyObject *pParams = PyTuple_New(2);// 方法参数个数PyTuple_SetItem(pParams, 0, Py_BuildValue("s", "ArcWall.ngc"));//init第一个参数PyTuple_SetItem(pParams, 1, Py_BuildValue("s", "trackFile03.csv"));//init第二个参数PyObject *pIns = PyObject_CallObject(pConstruct, pParams);// 传入参数PyObject *pFunhello = PyObject_GetAttrString(pIns, "hello");//调用函数PyObject *pParams1 = PyTuple_New(1);//函数参数个数PyTuple_SetItem(pParams1, 0, Py_BuildValue("s", "ArcWall"));// 传参PyObject *FuncTwoBack = PyObject_CallObject(pFunhello, pParams1);//获取返回值const char *Str = PyUnicode_AsUTF8(FuncTwoBack);qDebug() << Str;QApplication a(argc, argv);auto oeabt = new Oeabt();oeabt->show();return QApplication::exec();
}

下期介绍python 调用C++ / C

end-

C++ 调用 Python 代码 - Clion QT混合编程 ,各取长处。相关推荐

  1. Qt Creator与Qt+VS2015调用Python代码的实现

    下面来介绍分别用Qt Creator与Qt+VS2015调用Python代码,首先电脑中要安装Python IDE与Qt.我电脑中安装的是Python37,VS2015+Qt5.8.Qt Creato ...

  2. python和C语言混合编程实例

    转载自:http://www.jb51.net/article/50633.htm 这篇文章主要介绍了python和C语言混合编程实例,文中开发了一个tcp端口ping程序来介绍混合编程,需要的朋友可 ...

  3. c调用python脚本如何获取结果_使用C++调用Python代码的方法详解

    一.配置python环境问题 1.首先安装Python(版本无所谓),安装的时候选的添加python路径到环境变量中 安装之后的文件夹如下所示: 2.在VS中配置环境和库 右击项目->属性-&g ...

  4. java调用python代码

    同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包. 2. 下载下来的ja ...

  5. java代码调用python_java调用python代码-阿里云开发者社区

    同样的我们需要安装jython,具体的步骤如下: 2. 下载下来的jar包其实既是使用的时候需要引入的jar包,也是安装就jython的jar包.具体安装细节参照:https://wiki.pytho ...

  6. JavaScript调用Python代码

    JavaScript 可以使用 Node.js 的 child_process 模块来调用 Python 代码. 例如,你可以使用 child_process.spawn 方法来调用 Python 脚 ...

  7. xlwings : 从此可以 VBA 调用 Python 代码啦

    Python 的库总是异常丰富,比如 Python 操作 Excel ,根据 详解Python操作Excel文件 这篇文章的介绍,竟然达到了 9 种之多,文章的列举还不一定是穷举式的.这么多库,也没必 ...

  8. 如何在Clion中使用C++调用Python代码

    在很多时候,我们需要在一个c++工程项目中调用部分Python代码,这就需要我们实现Python和C++之间的交互.交互方式有两种:1. 依靠 TCP 建立的网络通信交互:2. 嵌入式混合语言编程(E ...

  9. 《Python开发 - Python杂记》Python与C/C++混合编程

    Python是脚本语言,可以做的事情非常的多,本文将要讲解使用Python来调用C/C+库. 关于C/C++库的创建请看笔者以前的文章,这里只给出Window下的创建过程. 静态库和动态库(Windo ...

最新文章

  1. 【简便解法】1084 外观数列 (20分)_24行代码AC
  2. 测试Maven版本插件自动递增版本号
  3. 程序员专属精品简历合集—面试必备
  4. php求平均值的函数_剔除两侧极值求平均Excel公式 去掉最大值最小值
  5. mysql 5.7.14-winx64_mysql-5.7.14-winx64 解压版本安装
  6. 程序员面试金典——2.7回文链表
  7. jeval 公式_几款公式解析工具的比较
  8. «构建并破坏它»:某些算法如何生成验证码,而另一些则如何破解
  9. 使用阿里字体彩色图标
  10. 给移动硬盘装上LINUX全攻略,给移动硬盘装上LINUX全攻略
  11. 大学英语精读第二版(第五册)复习笔记——文章内容摘要
  12. 纯HTML+CSS实现3D炫酷魔方(相册)
  13. Unity5权威讲解 笔记
  14. RLS,LMS以及NLMS三种自适应均衡matlab仿真
  15. BlackArch---让你有电影中黑客的感觉
  16. android 连续播放动画,华为充电动画循环播放
  17. 黑龙江科技大学计算机分数,2017黑龙江科技大学录取分数线
  18. 如何用xp系统做服务器,xp系统如何做远程服务器呢
  19. 镜像法的理解——工程电磁场 P9
  20. 【5G RRC】RSRP、RSRQ以及SINR含义、计算过程详细介绍

热门文章

  1. jstack详细介绍
  2. 微信小程序如何请求数据
  3. CubeMX生成的STM32F4xx MDK工程FPU和DSP库的使用
  4. 神经网络与矩阵表示之间的恩怨情仇
  5. openpyxl详解
  6. Navicat Premium和Navicat for MySQL的区别
  7. RewriteRule参数
  8. wps excel 链接url转图片工具
  9. k-means算法及改进
  10. 自定义php模板引擎