<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(...) |
宏
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 中引入.