环境:VS2017,Qt5.12.10(安装了msvc2017组件,并添加环境变量)
需求和概览:
Qt的信号与槽和便捷的界面编写非常有利于UI开发,很多时候希望把已经编写好的界面和逻辑加载到现有工程中,这时选择DLL加载是很敏捷的做法。
众所周知的,只有在构建了 QApplication 或 QCoreApplication(以下以QApplication为例) 后才能使用 QWidget 和信号与槽以及众多其他需要事件循环的功能。
在一个独立的Qt程序中,QApplication*一般是在main中构建的:
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
A a;
return app.exec();
}
然而要封装成DLL就需要在类里构建QApplication,形如QtAddOn_1.h
#pragma once
#include <QtWidgets/QDialog>
#include <QtWidgets/QApplication>
class QtAddOn_1:public QDialog
{
Q_OBJECT
private:
QApplication* app;
public:
explicit QtAddOn_1();
};
形如QtAddOn_1.cpp
#include "pch.h"
#include "QtAddOn_1.h"
QtAddOn_1::QtAddOn_1() {
int argc;
char ** argv = nullptr;
app = new QApplication(argc, argv);
//做一些Qt能做的所有事
app->exec();
}
#include"moc_QtAddOn_1.app"
形如DLL导出文件Modle.h
#pragma once
#include "QtAddOn_1.h"
namespace QtModles {
__declspec