qt-模块化开发(一)
- 格式:pdf
- 大小:158.59 KB
- 文档页数:4
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
#include
#include
#include
#include
#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
if(m_pluginInterface)
return true;
}
}
return false;
}
ok,现在我们测试程序也做好了。就要测试我们写的插件。如何测试?把我们的上⾯创建的插件,也就是dll复制到测试程序的运⾏⽬录中
(也就是测试程序所在的⼯作⽬录),然后运⾏此程序即可。但是这种⽅法不⽅便,不利于调试插件。那么我们还有⼀种⽅法,那就是直接运
⾏插件项⽬,但是会跳出如下画⾯:
当初次运⾏时,我们需要配置⼀下。主要是指定"Executable",即测试程序。通过右边的"浏览"找到你的测试程序就oK啦。这样⽅便才调试
插件