qt-模块化开发(一)
前言 免了罢,大家都晓得
正文 创建一个简单的插件
主文 手把手教学,实现一个简单的输出插件
1、创建plugin项目,选择"C++库"

2、选择"Qt plugin"

3、以此next后,可以看到文件列表如下:

好了,截止到现在我们创建了一个插件项目。虽然生成的插件什么都不能干。现在我们就让他干点事
4、为项目添加plugindemointerface.h 头文件,并定义如下:

5、在plugindemo.h中引用我们刚才创建的接口类,并实现输出printMsg接口。注意,创建项目时

6、接口的实现文件如下:

好了,截至到现在为止,插件已经做完了。我们现在另写一个基于QWidget的测试程序,测试一下刚才我们写的插件
7、创建一个基于QWidget的Application: test-usePlugin.头文件如下:

8、实现文件如下:
#include "testplugin.h" #include <QPushButton> #include <QHBoxLayout> #include <QDir> #include <QApplication> #include <QPluginLoader> #include "plugindemointerface.h" TestPlugin::TestPlugin(QWidget *parent) : QWidget(parent) { QPushButton *btn = new QPushButton(tr("click")); QHBoxLayout *mainLayout = new QHBoxLayout(this); mainLayout->addWidget(btn); loadPlugin(); connect(btn, &QPushButton::clicked, [this](){m_pluginInterface->printMsg("123456");}); //connect(btn, SIGNAL(clicked()), this, SLOT(m_pluginInterface->printMsg("123456");)); } TestPlugin::~TestPlugin() { } bool TestPlugin::loadPlugin() { QDir pluginDir(qApp->applicationDirPath()); foreach (QString fileName, pluginDir.entryList(QDir::Files)) { QPluginLoader pluginLoader(pluginDir.absoluteFilePath(fileName)); QObject *plugin = pluginLoader.instance(); if(plugin) { m_pluginInterface = qobject_cast<PluginDemoInterface*>(plugin); if(m_pluginInterface) return true; } } return false; }
ok,现在我们测试程序也做好了。就要测试我们写的插件。如何测试?把我们的上面创建的插件,也就是dll复制到测试程序的运行目录中(也就是测试程序所在的工作目录),然后运行此程序即可。但是这种方法不方便,不利于调试插件。那么我们还有一种方法,那就是直接运行插件项目,但是会跳出如下画面:

当初次运行时,我们需要配置一下。主要是指定"Executable",即测试程序。通过右边的"浏览"找到你的测试程序就oK啦。这样方便才调试插件

浙公网安备 33010602011771号