Qt5.2文档翻译:<QtPlugin> - 定义插件,<QtPlugin> - Defining Plugins
<QtPlugin> 这个头文件,定义了一些宏,这些宏是用来定义插件的。 详细说明……
Q_DECLARE_INTERFACE ( ClassName, Identifier) |
|
Q_IMPORT_PLUGIN ( PluginName) |
|
Q_PLUGIN_METADATA (...) |
参考 如何创建Qt插件 。
这个宏,会将指定的标识符( Identifier (一个字符串常量))与名为 ClassName 的接口类关联起来。此处的 Identifier必须是唯一的。例如:
#define BrushInterface_iid "org.qt-project.Qt.Examples.PlugAndPaint.BrushInterface"
Q_DECLARE_INTERFACE(BrushInterface, BrushInterface_iid)
这个宏,一般是在一个头文件中,紧接着 ClassName 的类定义之后使用的。参考 即插即画 示例 以了解细节。
如果妳想针对那些声明于某个命名空间中的接口类来使用Q_DECLARE_INTERFACE的话,则,妳需要确保,Q_DECLARE_INTERFACE自身不要位于一个命名空间中。例如:
namespace Foo
{
struct MyInterface { ... };
}
Q_DECLARE_INTERFACE(Foo::MyInterface, "org.examples.MyInterface")
参考 Q_INTERFACES () 和 如何创建Qt插件 。
这个宏,会导入名为 PluginName 的插件,对应于该插件的项目文件中指定的目标(TARGET)。
将这个宏插入到妳的应用程序的代码中,就可以使用某个静态插件了。
示例:
Q_IMPORT_PLUGIN(qjpeg)
静态插件 也必须在妳编译自己的程序的时候被链接器包含 到列表 中。对于 Qt 中预定义的插件, 妳可以使用 QTPLUGIN 来将所需的插件添加到妳的构建过程中。例如:
TEMPLATE = app
QTPLUGIN += qjpeg qgif # 图片格式
参考 静态插件 、 如何创建Qt插件 和 使用qmake 。
这个宏,用来声明一些元数据,这些元数据是某个实例化了此对象的插件的一部分。
这个宏,需要声明通过此对象实现的那个接口的接口编号(IID),以及,引用一个包含着该插件的元数据的文件。
在一个Qt 插件的源代码中,这个宏应当出现且仅出现一次。
示例:
class MyInstance : public QObject
{
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDummyPlugin" FILE "mymetadata.json")
};
参考 即插即画 示例 以了解细节。
注意,有这个宏出现于其中的那个类,必须可被默认构造函数构造。
FILE是可选的,指向一个json文件。
这个json文件必须位于当前构建系统所指定的某个包含目录中。当moc 无法找到指定的文件时,会给出一个错误码并且退出。
这个函数是从Qt 5.0 开始引入的。
参考 Q_DECLARE_INTERFACE () 和 如何创建Qt插件 。
Your opinionsHxLauncher: Launch Android applications by voice commands