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(plugin);

if(m_pluginInterface)

return true;

}

}

return false;

}

ok,现在我们测试程序也做好了。就要测试我们写的插件。如何测试?把我们的上⾯创建的插件,也就是dll复制到测试程序的运⾏⽬录中

(也就是测试程序所在的⼯作⽬录),然后运⾏此程序即可。但是这种⽅法不⽅便,不利于调试插件。那么我们还有⼀种⽅法,那就是直接运

⾏插件项⽬,但是会跳出如下画⾯:

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

插件