c++制作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);

 

posted @ 2016-09-15 12:43  patton-heart  阅读(768)  评论(0编辑  收藏  举报