Qt的plugin机制其实就是dll,那可能会有疑问:plugin生成的dll在project中使用和正常的dll有什么区别?答案就是区别很大,plugin,顾名思义,插件可有可无,有插件(dll),我的软件可以正常运行;没有插件,我的软件应该也可以运行,只不过插件功能不能体现在我的软件中了;但是正常的dll是我的软件不可缺少的一部分,没有它,我的软件就不能打开。由此可见,plugin功能给应用程序提供了很灵活的功能扩展。废话少说,来看看怎么在Qt project中创建和使用吧! 要遵循以下步骤:
- 1.新建一个共享库工程,类名称为MikPlugin
- 2.在该工程中新建一个头文件,该头文件作用是声明接口,接口类在Qt中大多是纯虚基类,需要定义一个唯一的IID
#define MikPlugin_IID "mihooke.github.io"再声明这个接口类到Qt元系统中
Q_DECLARE_INTERFACE(MikPluginInterface, MikPlugin_IID) - 3.让MikPlugin继承自QObject和MikPluginInterface
类中进行一次元数据绑定
Q_PLUGIN_METADATA(IID MikPlugin_IID FILE "mikPlugin.json") Q_INTERFACES(MikPluginInterface)注意:这里需要在代码目录下创建一个json文件,内容是key:value形式。一般为空就行。
- 4.新建应用程序,使用插件,使用代码:
QObject *object; a.addLibraryPath(QString("../debug")); QPluginLoader l(QString("MikPlugin")) ; if ( (object=l.instance()) != NULL ) { qDebug("plugin loaded ."); MikPluginInterface* plugin = qobject_cast<MikPluginInterface*>(object) ; if (plugin) plugin->hello("hello plugin"); } else { qDebug("failed to load plugin !! "); QString errorStr = l.errorString(); qDebug()<<errorStr; }