qt使用外部库(python/opencv为例)

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

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

一:qt调python脚本

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

qt使用外部库(python/opencv为例)_第1张图片

接下来要引入外部库

qt使用外部库(python/opencv为例)_第2张图片

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

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

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

qt使用外部库(python/opencv为例)_第3张图片

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

qt使用外部库(python/opencv为例)_第4张图片

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

qt使用外部库(python/opencv为例)_第5张图片

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

qt使用外部库(python/opencv为例)_第6张图片

到此我们添加库成功 

测试一下

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

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

qt使用外部库(python/opencv为例)_第7张图片

#测试用的py代码 py_demo.py

def show():
    print("hello!")
//main.cpp


#include "mainwindow.h"
#include
#include 

#undef slots
#include 
#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先编译后才有输出目录)

例如我的目录如下

qt使用外部库(python/opencv为例)_第8张图片

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

qt使用外部库(python/opencv为例)_第9张图片 qt使用外部库(python/opencv为例)_第10张图片

 结果:

二: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官方编译好的文件,演示只使用自己编译的库

qt使用外部库(python/opencv为例)_第11张图片

 

先配一下环境变量

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

里面文件长这样

qt使用外部库(python/opencv为例)_第12张图片

 然后添加库,和之前一样

qt使用外部库(python/opencv为例)_第13张图片

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

qt使用外部库(python/opencv为例)_第14张图片

include目录如下

qt使用外部库(python/opencv为例)_第15张图片 

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

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

qt使用外部库(python/opencv为例)_第16张图片

 

你可能感兴趣的:(qt,开发语言)