赞
踩
如果对你有帮助,可以给卑微的博主留个赞、关注、收藏 (不是)
除了qt自带的官方库文件,有时可能想用到一些第三方的库文件,或者调用python等行为,所以需要引入外部库,道理很简单,实现起来也不难,不过有一些要注意的小问题。
本文章使用的环境 qt 5.12.6 python3.7 64bit opencv 3.4.14
创建一个qwidgets应用,不多说,该怎么创建都懂的
接下来要引入外部库
自然选择外部库然后接下来要注意了
python的库是动态库,你需要找到自己的python存储目录,要引入的库文件名字是libpythonXX.a
(XX是版本,我的python3.7就是37) ,找到后确认,接下去是包含路径,当你选择库文件后会生成包含路径,但是默认的路径是错的,需要手动改。
在我们刚才选的库文件的上一级目录里面有个include文件夹,这才是正确的路径
最后选完就是这样子,我们把为debug版本添加后缀去掉,我装的python好像没有debug版本的,所以不选,选了应该也没什么关系,然后点下一步,再点完成就添加完毕了
添加完之后会多出几行代码
到此我们添加库成功
测试一下
在需要使用python的cpp文件中 引入py头文件 ,(Python.h)
注意:这里由于命名冲突需要先取消qt本来的定义,再引入头文件,最后恢复qt原本的定义
- #测试用的py代码 py_demo.py
-
- def show():
- print("hello!")
'运行
- //main.cpp
-
-
- #include "mainwindow.h"
- #include<QDebug>
- #include <QApplication>
-
- #undef slots
- #include <Python.h>
- #define slots
-
- int main(int argc, char *argv[])
- {
- Py_Initialize(); //初始化python
-
- if(!Py_IsInitialized()) //如果初始化失败
- {
- qDebug()<<"Python init fail!";
- return -1;
- }
- //加载模块,模块名称为py_demo (py_demo.py)
- PyObject *pModule = PyImport_ImportModule("py_demo");
-
- if(!pModule) //加载失败
- {
- qDebug()<<"load pModule fail!";
- return -1;
- }
-
- PyObject* show = PyObject_GetAttrString(pModule, "show"); //加载show函数
-
- if(!show) //加载函数失败
- {
- qDebug() << "load func show fail";
- }
-
- //PyEval_CallObject(show,NULL); //调用函数show 旧式写法
-
- PyObject_CallFunction(show,nullptr,nullptr); //新写法
-
- Py_Finalize(); //退出
-
- return 0;
- }

注意:py_demo.py需要放在输出目录(qt先编译后才有输出目录)
例如我的目录如下
那py文件放在这里(输出目录的debug里面,如果使用release 就是release里面)
结果:
先创建工程,纯c++就行,应该没有不会的吧
之后还有一个问题,opencv我们下载的编译好的版本适用于vs的编译链,而qt编译有msvc和mingw两种,使用mingw的话我们需要手动编译opencv的源码
这里需要的可以参考这个视频,b站贾志刚老师的视频,当初也是拿这个教程配的环境,但是我qt版本比较低,opencv4编译没成功,qt5.12最多支持opencv3,如果使用的版本比较高可以直接看视频,比较低就只看视频的编译源码部分
考虑到官网opencv下载有点慢,我就顺便把源码和编译好的库上传了,应该没事吧
需要的主页免费自取
下面介绍使用mingw编译链下的opencv
这个是我编译好的库,其他文件是源码和opencv官方编译好的文件,演示只使用自己编译的库
先配一下环境变量
路径是mingw_build/install/x64/mingw/bin
里面文件长这样
然后添加库,和之前一样
接下来选动态库,库文件路径如下
include目录如下
debug版本后缀加d取消勾选,点下一步完成就行了
测试头文件都没有报错,应该就完成了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。