当前位置:   article > 正文

qt使用外部库(python/opencv为例)_qt调用python第三方库

qt调用python第三方库

如果对你有帮助,可以给卑微的博主留个赞、关注、收藏   (不是) 

除了qt自带的官方库文件,有时可能想用到一些第三方的库文件,或者调用python等行为,所以需要引入外部库,道理很简单,实现起来也不难,不过有一些要注意的小问题。

本文章使用的环境 qt 5.12.6     python3.7 64bit     opencv 3.4.14 

一:qt调python脚本

创建一个qwidgets应用,不多说,该怎么创建都懂的

接下来要引入外部库

 自然选择外部库然后接下来要注意了

python的库是动态库,你需要找到自己的python存储目录,要引入的库文件名字是libpythonXX.a

(XX是版本,我的python3.7就是37) ,找到后确认,接下去是包含路径,当你选择库文件后会生成包含路径,但是默认的路径是错的,需要手动改。

在我们刚才选的库文件的上一级目录里面有个include文件夹,这才是正确的路径

最后选完就是这样子,我们把为debug版本添加后缀去掉,我装的python好像没有debug版本的,所以不选,选了应该也没什么关系,然后点下一步,再点完成就添加完毕了

 添加完之后会多出几行代码

到此我们添加库成功 

测试一下

在需要使用python的cpp文件中 引入py头文件 ,(Python.h)

注意:这里由于命名冲突需要先取消qt本来的定义,再引入头文件,最后恢复qt原本的定义

  1. #测试用的py代码 py_demo.py
  2. def show():
  3. print("hello!")
'
运行
  1. //main.cpp
  2. #include "mainwindow.h"
  3. #include<QDebug>
  4. #include <QApplication>
  5. #undef slots
  6. #include <Python.h>
  7. #define slots
  8. int main(int argc, char *argv[])
  9. {
  10. Py_Initialize(); //初始化python
  11. if(!Py_IsInitialized()) //如果初始化失败
  12. {
  13. qDebug()<<"Python init fail!";
  14. return -1;
  15. }
  16. //加载模块,模块名称为py_demo (py_demo.py)
  17. PyObject *pModule = PyImport_ImportModule("py_demo");
  18. if(!pModule) //加载失败
  19. {
  20. qDebug()<<"load pModule fail!";
  21. return -1;
  22. }
  23. PyObject* show = PyObject_GetAttrString(pModule, "show"); //加载show函数
  24. if(!show) //加载函数失败
  25. {
  26. qDebug() << "load func show fail";
  27. }
  28. //PyEval_CallObject(show,NULL); //调用函数show 旧式写法
  29. PyObject_CallFunction(show,nullptr,nullptr); //新写法
  30. Py_Finalize(); //退出
  31. return 0;
  32. }

注意:py_demo.py需要放在输出目录(qt先编译后才有输出目录)

例如我的目录如下

那py文件放在这里(输出目录的debug里面,如果使用release 就是release里面)

 

 结果:

二:qt使用opencv

先创建工程,纯c++就行,应该没有不会的吧

之后还有一个问题,opencv我们下载的编译好的版本适用于vs的编译链,而qt编译有msvc和mingw两种,使用mingw的话我们需要手动编译opencv的源码

这里需要的可以参考这个视频,b站贾志刚老师的视频,当初也是拿这个教程配的环境,但是我qt版本比较低,opencv4编译没成功,qt5.12最多支持opencv3,如果使用的版本比较高可以直接看视频,比较低就只看视频的编译源码部分

https://www.bilibili.com/video/BV1Za4y1v7ra/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=49f5c9b51a6873d5fc74ea6b061d9259

考虑到官网opencv下载有点慢,我就顺便把源码和编译好的库上传了,应该没事吧

需要的主页免费自取

下面介绍使用mingw编译链下的opencv

这个是我编译好的库,其他文件是源码和opencv官方编译好的文件,演示只使用自己编译的库

先配一下环境变量

路径是mingw_build/install/x64/mingw/bin

里面文件长这样

 然后添加库,和之前一样

 接下来选动态库,库文件路径如下

include目录如下

 debug版本后缀加d取消勾选,点下一步完成就行了

测试头文件都没有报错,应该就完成了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/944302
推荐阅读
相关标签
  

闽ICP备14008679号