<QtPlugin> - Defining Plugins

The <QtPlugin> header file defines macros for defining plugins. 更多...

Macros

Q_DECLARE_INTERFACE(ClassName, Identifier)
Q_IMPORT_PLUGIN(PluginName)
Q_PLUGIN_METADATA(...)

参见 How to Create Qt Plugins.

Q_DECLARE_INTERFACE(ClassName, Identifier)

该宏将给定的 Identifier (字符串字面量) 与名为 ClassName 的接口类关联. Identifier 必须是唯一的. 例如:


  #define BrushInterface_iid "org.qt-project.Qt.Examples.PlugAndPaint.BrushInterface"

  Q_DECLARE_INTERFACE(BrushInterface, BrushInterface_iid)

通常在头文件中 ClassName 的类定义之后立即使用此宏. 详见 Plug & Paint example for details.

如果要对命名空间中的接口类使用 Q_DECLARE_INTERFACE, 必须保证 Q_DECLARE_INTERFACE 不在命名空间中. 例如:


  namespace Foo
  {
      struct MyInterface { ... };
  }

  Q_DECLARE_INTERFACE(Foo::MyInterface, "org.examples.MyInterface")

参见 Q_INTERFACES() 和 How to Create Qt Plugins.

Q_IMPORT_PLUGIN(PluginName)

该宏导入名为 PluginName 的插件, 该插件与使用 Q_PLUGIN_METADATA() 声明插件元数据的类的名称相对应.

将该宏插入应用程序的源代码来使您能够使用静态插件.

例如:


  Q_IMPORT_PLUGIN(qjpeg)

构建应用程序时, 链接器必须包含静态插件. 对于 Qt 预定义的插件, 可以使用 QTPLUGIN 将插件加入你的构建系统. 例如:


  TEMPLATE      = app
  QTPLUGIN     += qjpeg qgif    # image formats

参见 Static Plugins, How to Create Qt Plugins, Getting Started with qmake.

Q_PLUGIN_METADATA(...)

该宏用于声明插件元数据, 它是实例化此对象的插件的一部分.

该宏需要声明通过该对象实现的接口的 IID, 并引用包含该插件的元数据的文件.

对于某一个 Qt 插件, 该宏在源代码中应恰好出现一次.

示例:


  class MyInstance : public QObject
  {
      Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDummyPlugin" FILE "mymetadata.json")
  };

详见 Plug & Paint.

注意: 该宏出现的类必须是可默认构造的.

FILE 是可选的, 并指向一个 json 文件.

该 json 文件必须存在于构建系统指定的包含目录之一中. 当找不到指定文件时, moc 将退出并显示错误.

该宏在 Qt 5.0 中引入.

参见 Q_DECLARE_INTERFACE() 和 How to Create Qt Plugins.