【Qt 导出生成并使用第三方库】02:导出带QT界面且依赖opencv库的DLL 并使用

前言

在前面文章中我们讲过如何导出/导入 C++内容的DLL文件。在下面的内容我讲继续讲解如何导出/导入带QT界面且依赖opnecv库的DLL。

程序功能效果展示
userDLL这个项目通过调用jbyDLL.dll第三方库 实现opencv显示图片 和 显示QT界面

导出带QT界面且依赖opencv第三方库的DLL

和文章一相同我们首先需要先创建一个Library库项目
但这里我们需要注意,因为我们这次导出的DLL需要包含QT界面所以我们需要勾选上QtGui模块
【Qt 导出生成并使用第三方库】02:导出带QT界面且依赖opencv库的DLL 并使用_第1张图片
首先我们先看如何导出一个带Qt界面的DLL
在widgetDll这个类中 我们实现显示Qt窗口并在点击按钮后打印提示信息的功能

#include "widgetdll.h"
#include "ui_widgetdll.h"
#include 

widgetDll::widgetDll(QWidget *parent)
{
    ui = new Ui::widgetDll;
    ui->setupUi(this);
    qDebug() << "widgetDll";
}

widgetDll::~widgetDll()
{
    delete ui;
}

void widgetDll::on_pushButton_clicked()
{
    qDebug() << "1111";
}

void widgetDll::on_pushButton_2_clicked()
{
    qDebug() << "2222";
}

在widgetdll.h中 我们需要通过Q_DECL_EXPORT告诉编辑器 widgetDll这个类需要导出到第三方库中去
【Qt 导出生成并使用第三方库】02:导出带QT界面且依赖opencv库的DLL 并使用_第2张图片
然后点击编译即可获得一个带Qt界面的DLL。

接下来我们看看如何导出一个依赖opencv库的DLL

准备工作
首先我们需要准备opencv的第三库(包含头文件(.h)、导入库文件(.lib)、动态链接库(.dll) 在文章最下发我会提供这个项目的所以源码,大家可以自行下载)

1.在Library库项目中导入opencv库
我这里用到的是 msvc 64位 opencv4.3版本的第三方库

INCLUDEPATH += $$PWD/OPENCV-X64-4.3/include
INCLUDEPATH += $$PWD/OPENCV-X64-4.3/include/opencv2
DEPENDPATH += $$PWD/OPENCV-X64-4.3/x64/vc15
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/OPENCV-X64-4.3/x64/vc15/lib/ -lopencv_world430
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/OPENCV-X64-4.3/x64/vc15/lib/ -lopencv_world430d

2.编写调用opencv库的Demo
在opencvDLL这个类中 我们实现调用opencv库显示本地图片

和前面一样在opencvdll.h中 我们需要通过Q_DECL_EXPORT告诉编辑器 opencvDLL这个类需要导出到第三方库中去

在opencvdll.h文件中添加如下代码

#ifndef OPENCVDLL_H
#define OPENCVDLL_H
#include 
#if defined(JBYDLL_LIBRARY)
#  define JBYDLLSHARED_EXPORT Q_DECL_EXPORT
#else
#  define JBYDLLSHARED_EXPORT Q_DECL_IMPORT
#endif

class JBYDLLSHARED_EXPORT  opencvDLL
{
public:
    opencvDLL();
};

#endif // OPENCVDLL_H

在opencvdll.cpp文件中添加如下代码

#include "opencvdll.h"
#include 
#include 
#include 
#include 
using namespace std;
using namespace cv;
opencvDLL::opencvDLL()
{
    //读入图片,注意图片路径
    qDebug() << "opencvDLL";
    Mat image = imread("C:/Users/jbyyy/Desktop/work/jbywork/FCT/111.png");
    namedWindow("window", WINDOW_NORMAL);
    imshow("window",image);
    waitKey(0);
}

这里需要特别说明一下
建议把下面这些include操作放在 .cpp中进行 避免后续找不到指定文件

#include 
#include 
#include 
#include 

将widgetDll和opencvDLL两个类都放到Library库项目中然后点击编译即可获得一个带Qt界面和opencv显示本地图片功能的DLL了。

导入并使用上面生成的DLL文件

准备工作
将刚才生成的头文件(.h)、导入库文件(.lib)、动态链接库(.dll) 和opencv的dll文件放入一个文件夹内
【Qt 导出生成并使用第三方库】02:导出带QT界面且依赖opencv库的DLL 并使用_第3张图片
1.导入第三方库

LIBS += -L$$PWD/jbyDLL/ -ljbyDLL
INCLUDEPATH += $$PWD/jbyDLL
DEPENDPATH += $$PWD/jbyDLL

2.直接实例化DLL中的类

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "jbydll.h"
#include 
#include "opencvdll.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    wdll = new widgetDll(this);
    setCentralWidget(wdll);
    opencvDLL opencv;
}

MainWindow::~MainWindow()
{
    delete ui;
}

3.将依赖的DLL文件放到构造目录里面就可以正常运行程序了
在下一篇我会讲解
1.如何导出可以给C#项目使用的 带Qt界面和opencv库的DLL文件
本篇对应源码
https://github.com/jbyyy/QtDllLearing/releases/tag/QtDllLearingTEST2.0

Qt 导出生成并使用第三方库

【Qt 导出生成并使用第三方库】01:导出C++内容的DLL 并使用

【Qt 导出生成并使用第三方库】02:导出带QT界面且依赖opencv库的DLL]

【Qt 导出生成并使用第三方库】03:导出供MFC调用且带QT界面的DLL

你可能感兴趣的:(Qt,导出生成并使用第三方库,qt,opencv,dll)