QT插件使用

Posted patton

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT插件使用相关的知识,希望对你有一定的参考价值。

1基本插件制作流程

      1) 定义接口。接口定义为抽象基类,如IPluginInterface,实现高度封装。定义的头文件在最后需要通过Q_DECLARE_INTERFACE来唯一标识该接口,即通过一个全局ID绑定接口。比如:

Q_DECLARE_INTERFACE(IPluginInterface, “com.blog.test.plugin.test/1.0”)

      2) 实现接口。PluginInterfaceImp类通过继承自抽象基类IPluginInterface (同时继承QObject),实现了接口方法。PluginInterfaceImp类需要申明两个东西:

Q_OBJECT

Q_INTERFACES(PlugInterface)

      这样能保证接口具备QT的基本功能机制,比如信号槽、接口识别等。

      3) 最后,在适当的地方申明Q_EXPORT_PLUGIN2,其第二个参数是之后在加载该插件得到的对象的类名,比如PluginInterfaceImp。

2项目中应用

      项目中使用QT的插件,一般会不止一个,而插件作为QT独特的接口库使用方法,可以由统一的使用框架进行管理,方便使用。基本框架图如下:

            技术分享

      PluginManager:负责插件初始化和加载。

      其中、插件初始化会对指定目录下的文件通过QLibrary::resolve进行加载。这样就获得了一个插件模块对象列表,可以存放到一个map中,通过ID来索引,值为IPluginFactory指针表示的PluginFactory对象。

      加载则是获取指定ID的PluginFactory对象,然后通过GetPluginObj()获得实际插件对象。

      IPluginFactory:插件对象统一对外接口,其派生类实例对象对应着某个插件,因此能在派生类对象中实现GetPluginID()和GetPluginObj()方法,得到最终的插件对象。

      这样,制作好的插件放在项目制定文件夹后,就可以在项目中使用这些插件了:

      1)  初始化PluginManager:: Instance().Init();

      2) 加载插件LoadPlugin(id);

 

以上是关于QT插件使用的主要内容,如果未能解决你的问题,请参考以下文章

在Qt插件中使用主程序的全局变量

使用静态 qmake 使用 QT Widget 插件

如何从 Qt 插件中使用宿主应用程序的类?

如何使用 oracle 插件部署基于 qt 的应用程序

使用带有新信号槽语法的 Qt 插件系统在接口类中声明信号

如何使用Qt插件在Qt中进行ROS开发