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

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

除了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原本的定义

#测试用的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里面)

 

 结果:

二: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取消勾选,点下一步完成就行了

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

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凛_Lin~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值