Qt插件定义

简介: 定义插件的宏在头文件 中,包含了几个用于定义插件的宏:Q_DECLARE_INTERFACE(ClassName, Identifier)Q_IMPORT_PLUGIN(PluginName)Q_PLUGIN_METADATA(.

定义插件的宏

在头文件 <QtPlugin> 中,包含了几个用于定义插件的宏:

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

所以,在正式编写插件之前,很有必要先了解他们,一起来看看助手中的描述吧!

版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820

宏文档

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 的类定义之后使用,在头文件中。

如果要将 Q_DECLARE_INTERFACE 用于一个命名空间中声明的接口类,则必须确保 Q_DECLARE_INTERFACE 不在命名空间内。例如:

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

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

Q_IMPORT_PLUGIN(PluginName)

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

将这个宏插入到应用程序的源代码中,将允许使用一个静态插件。

例如:

Q_IMPORT_PLUGIN(qjpeg)

当构建应用程序时,链接器还必须包含静态插件。对于 Qt 的预定义插件,可以使用 QTPLUGIN 将所需的插件添加到构建中。例如:

TEMPLATE      = app
QTPLUGIN     += qjpeg qgif    # 图像格式

Q_PLUGIN_METADATA(...)

该宏用于声明(实例化该对象的)插件的元数据,元数据是插件的一部分。

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

例如:

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

注意: 这个宏所在的类必须是默认可构造的。

FILE 是可选的,并指向一个 Json 文件。

Json 文件必须位于构建系统指定的包含目录之一中。当无法找到指定的文件时,moc 会出现错误。

目录
相关文章
|
3月前
|
计算机视觉
基于QT的opencv插件框架qtCvFrameLearn实战
这篇文章详细介绍了如何基于Qt框架开发一个名为qtCvFrameLearn的OpenCV插件,包括项目配置、插件加载、Qt与OpenCV图像转换,以及通过各个插件学习OpenCV函数的使用,如仿射变换、卡通效果、腐蚀、旋转和锐化等。
46 10
|
3月前
|
C语言 C++ Windows
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
QT多插件通信框架CTK编译记录
|
5月前
|
监控 Python
`pytest-qt` 是一个用于在 Qt 应用程序中进行 GUI 测试的 pytest 插件。
`pytest-qt` 是一个用于在 Qt 应用程序中进行 GUI 测试的 pytest 插件。
|
7月前
|
C++
Qt定义属性类信息报错‘Qstring‘ was not declared in this scope; did you mean ‘xxx‘?并且还有有一堆报错,问题还出现在moc文件
Qt定义属性类信息报错‘Qstring‘ was not declared in this scope; did you mean ‘xxx‘?并且还有有一堆报错,问题还出现在moc文件
108 0
|
7月前
|
编译器 C++ 计算机视觉
QT 插件创建
QT 插件创建
56 0
|
JSON 数据格式
《QT从基础到进阶·三十三》QT插件开发QtPlugin
《QT从基础到进阶·三十三》QT插件开发QtPlugin
204 0
Qt-做一个快速打包插件(一键完成项目软件打包)
Qt-做一个快速打包插件(一键完成项目软件打包)
123 0
|
存储 JSON API
Qt开发技术:Qt的动态静态插件框架介绍和Demo
Qt开发技术:Qt的动态静态插件框架介绍和Demo
Qt开发技术:Qt的动态静态插件框架介绍和Demo
|
Ubuntu Shell 计算机视觉
Qt实用技巧:ubuntu发布程序打包流程(解决插件xcb加载失败)
Qt实用技巧:ubuntu发布程序打包流程(解决插件xcb加载失败)
Qt实用技巧:ubuntu发布程序打包流程(解决插件xcb加载失败)
|
安全 JavaScript 编译器
QT调用IE浏览器COM插件完成网页浏览
QT调用IE浏览器COM插件完成网页浏览
456 0
QT调用IE浏览器COM插件完成网页浏览