StupidBeauty
Read times:1542Posted at: - no title specified

Qt5.2文档翻译:<QtPlugin> - 定义插件,<QtPlugin> - Defining Plugins

<QtPlugin> 这个头文件,定义了一些宏,这些宏是用来定义插件的。 详细说明……

Q_DECLARE_INTERFACE ClassNameIdentifier)

Q_IMPORT_PLUGIN PluginName)

Q_PLUGIN_METADATA (...)

参考 如何创建Qt插件

宏文档

Q_DECLARE_INTERFACEClassNameIdentifier)

这个宏,会将指定的标识符( 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插件

Q_IMPORT_PLUGINPluginName)

这个宏,会导入名为 PluginName 的插件,对应于该插件的项目文件中指定的目标(TARGET)。

将这个宏插入到妳的应用程序的代码中,就可以使用某个静态插件了。

示例

Q_IMPORT_PLUGIN(qjpeg)

静态插件 也必须在妳编译自己的程序的时候被链接器包含 到列表 中。对于 Qt 中预定义的插件, 妳可以使用 QTPLUGIN 来将所需的插件添加到妳的构建过程中。例如:

TEMPLATE      = app

QTPLUGIN     += qjpeg qgif    # 图片格式

参考 静态插件 如何创建Qt插件 使用qmake

Q_PLUGIN_METADATA(...)

这个宏,用来声明一些元数据,这些元数据是某个实例化了此对象的插件的一部分。

这个宏,需要声明通过此对象实现的那个接口的接口编号(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 opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands