QtPlugin定义插件
目录
Q_DECLARE_INTERFACE(ClassName, Identifier)
- 参考:<QtPlugin> - Defining Plugins | Qt Core 5.15.6
- #include <QtPlugin>
宏
Q_DECLARE_INTERFACE(ClassName, Identifier) Q_IMPORT_PLUGIN(PluginName) Q_PLUGIN_METADATA(...)
Q_DECLARE_INTERFACE(ClassName, Identifier)
- 这个宏将给定的标识符(一个字符串字面值)关联到名为ClassName的接口类。标识符必须是唯一的。例如:
#define BrushInterface_iid "org.qt-project.Qt.Examples.PlugAndPaint.BrushInterface/1.0" Q_DECLARE_INTERFACE(BrushInterface, BrushInterface_iid)
- 这个宏通常在头文件中,在ClassName的类定义之后使用。详情请参阅Plug & Paint示例。
- 如果你想在命名空间中声明的接口类中使用Q_DECLARE_INTERFACE,那么你必须确保Q_DECLARE_INTERFACE不在命名空间中。例如:
namespace Foo { struct MyInterface { ... }; } Q_DECLARE_INTERFACE(Foo::MyInterface, "org.examples.MyInterface")
- See also Q_INTERFACES() and 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
- See also Static Plugins, How to Create Qt Plugins, and 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文件必须驻留在构建系统指定的一个include目录中。当无法找到指定的文件时,Moc退出并出现错误。
- 这个函数是在Qt 5.0中引入的。