Mihooke的技术专栏 C++ and Python Coder

Qt plugin创建和使用

2018-09-02

阅读:

Qt

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;
      }
    

Comments

Content