linux下qt用c++调用python

本文介绍如何在Qt中集成Python环境,包括配置步骤、解决常见错误等。通过详细步骤指导读者完成配置并解决object.h与Qt全局slots冲突的问题。
部署运行你感兴趣的模型镜像

看了很多篇这样的文章,但都没有找到适合自己的,今天就自己通过经验去尝试,结果配置出来了,可以进行下一步,现在记录一下过程,方便下次配置,也希望能对你们有用。

首先确保你的linux系统下正确安装了python和qt 

我的qt版本是5.8.0  然后python版本是3.5.0的  

先新建一个qt的项目,然后右键点击添加库,选择外部库


然后

库文件的路径就是一般是在usr/lib/python3.5/config-3.5m-x86_64-linux-gnu  然后选择libpython3.5m.a

包含路径选择  /usr/include/python3.5

这里如果你们安装的时候不是安装在usr下的话,可以先在终端输入  locate libpython   确认位置再添加


添加好路径 平台后,点击下一步,点击完成就可以了,这个时候  .pro 里面就已经自动生成了python的库和路径了。


这个时候添加python的头文件和函数,构建执行一下,没有错误就ok了


接下来是报错的解决问题,一般都是会遇到一个问题就是 object.h里的一个定义和qt的全局slots冲突,这时就只需修改那个object.h的slots名字就可以了

错误如下


双击错误 跳转


改为随便一个英文名字就可以了,这个几乎不会用到。


更改后保存,要说的是,如果你的这个文件有写保护的话,在这里更改是更改不了的,要去到该文件夹下,把文件的属性改为可读可写可执行   

先去到计算机,打开usr这个文件夹,     usr/include



选择终端打开,   输入   chomd -R 777 python3.5/          (将该文件夹下的所有文件改为可读可写可执行)  权限不够就在前面加  sudo

更改好之后就打开文件夹,找到object.h   然后在里面找到那个slots     更改保存即可,


好了,回到qt重新载入,编译就可以通过了



好了,希望以上内容对你们有帮助,拜了拜。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

以下是一个使用Qt6和C++调用Python类的示例代码。此示例假设你已经配置好了Python环境。 ### 1. Python类示例(`example.py`) ```python class ExampleClass: def __init__(self, value): self.value = value def get_value(self): return self.value def add_value(self, num): self.value += num return self.value ``` ### 2. Qt6 C++代码示例 ```cpp #include <QCoreApplication> #include <Python.h> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 初始化Python解释器 Py_Initialize(); // 导入Python模块 PyObject* pModule = PyImport_ImportModule("example"); if (!pModule) { PyErr_Print(); return -1; } // 获取Python类对象 PyObject* pClass = PyObject_GetAttrString(pModule, "ExampleClass"); if (!pClass || !PyCallable_Check(pClass)) { if (PyErr_Occurred()) PyErr_Print(); return -1; } // 创建Python类的实例 PyObject* pArgs = Py_BuildValue("(i)", 10); PyObject* pInstance = PyObject_CallObject(pClass, pArgs); Py_DECREF(pArgs); if (!pInstance) { if (PyErr_Occurred()) PyErr_Print(); return -1; } // 调用Python类的方法 // 调用get_value方法 PyObject* pMethod = PyObject_GetAttrString(pInstance, "get_value"); if (pMethod && PyCallable_Check(pMethod)) { PyObject* pResult = PyObject_CallObject(pMethod, nullptr); Py_DECREF(pMethod); if (pResult) { long result; PyArg_Parse(pResult, "l", &result); qDebug() << "get_value result:" << result; Py_DECREF(pResult); } else { if (PyErr_Occurred()) PyErr_Print(); } } // 调用add_value方法 pMethod = PyObject_GetAttrString(pInstance, "add_value"); if (pMethod && PyCallable_Check(pMethod)) { pArgs = Py_BuildValue("(i)", 5); PyObject* pResult = PyObject_CallObject(pMethod, pArgs); Py_DECREF(pArgs); Py_DECREF(pMethod); if (pResult) { long result; PyArg_Parse(pResult, "l", &result); qDebug() << "add_value result:" << result; Py_DECREF(pResult); } else { if (PyErr_Occurred()) PyErr_Print(); } } // 释放资源 Py_DECREF(pInstance); Py_DECREF(pClass); Py_DECREF(pModule); // 关闭Python解释器 Py_Finalize(); return a.exec(); } ``` ### 代码说明 1. **初始化Python解释器**:使用`Py_Initialize()`初始化Python解释器。 2. **导入Python模块**:使用`PyImport_ImportModule`导入Python模块。 3. **获取Python类对象**:使用`PyObject_GetAttrString`获取Python类对象。 4. **创建Python类的实例**:使用`PyObject_CallObject`创建Python类的实例。 5. **调用Python类的方法**:使用`PyObject_GetAttrString`获取方法对象,然后使用`PyObject_CallObject`调用方法。 6. **释放资源**:使用`Py_DECREF`释放Python对象的引用。 7. **关闭Python解释器**:使用`Py_Finalize()`关闭Python解释器。 ### 编译和运行 确保你已经在Qt项目中正确配置了Python环境,然后编译并运行该项目
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值