在前面文章中我们讲过如何导出/导入 C++内容的DLL文件。在下面的内容我讲继续讲解如何导出/导入带QT界面且依赖opnecv库的DLL。
程序功能效果展示
userDLL这个项目通过调用jbyDLL.dll第三方库 实现opencv显示图片 和 显示QT界面
和文章一相同我们首先需要先创建一个Library库项目
但这里我们需要注意,因为我们这次导出的DLL需要包含QT界面所以我们需要勾选上QtGui模块
首先我们先看如何导出一个带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界面的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了。
准备工作
将刚才生成的头文件(.h)、导入库文件(.lib)、动态链接库(.dll) 和opencv的dll文件放入一个文件夹内
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 导出生成并使用第三方库】01:导出C++内容的DLL 并使用
【Qt 导出生成并使用第三方库】02:导出带QT界面且依赖opencv库的DLL]
【Qt 导出生成并使用第三方库】03:导出供MFC调用且带QT界面的DLL