本页内容

QImageIOPlugin Class

QImageIOPlugin 类定义了一个用于编写图像格式插件的接口。更多内容...

头文件: #include <QImageIOPlugin>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
继承自: QObject

注意:该类中的所有函数均为可重入的。

公共类型

flags Capabilities
enum Capability { CanRead, CanWrite, CanReadIncremental }

公共函数

QImageIOPlugin(QObject *parent = nullptr)
virtual ~QImageIOPlugin()
virtual QImageIOPlugin::Capabilities capabilities(QIODevice *device, const QByteArray &format) const = 0
virtual QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const = 0

详细说明

QImageIOPlugin 是一个用于创建QImageIOHandler 对象的工厂,QImageReader 和QImageWriter 在内部使用这些对象,为 Qt 添加对不同图像格式的支持。

编写图像 I/O 插件的方法是继承此基类,重新实现纯虚函数capabilities() 和create(),并使用Q_PLUGIN_METADATA() 宏导出该类。详情请参阅《如何创建 Qt 插件》。

图像格式插件可支持三种功能:读取(CanRead )、写入(CanWrite )和增量读取(CanReadIncremental )。请在子类中重写capabilities() 方法,以暴露您所支持的图像格式功能。

create() 应创建一个QImageIOHandler 子类的实例,正确设置所提供的设备和格式,并返回该处理程序。

插件的 JSON 元数据文件需要包含插件所支持的图像格式信息,以及相应的 MIME 类型(每种格式对应一个)。例如,对于一个 JPEG 插件,内容可能如下所示:

{
  "Keys": [ "jpg", "jpeg" ],
  "MimeTypes": [ "image/jpeg", "image/jpeg" ]
}

不同的插件可以支持不同的功能。例如,您可能有一个插件支持读取 GIF 格式,另一个则支持写入。Qt 将根据capabilities() 的返回值选择适合该任务的正确插件。如果多个插件支持相同的功能,Qt 将随机选择其中一个。

另请参阅 QImageIOHandler 以及《如何创建 Qt 插件》。

成员类型文档

enum QImageIOPlugin::Capability
flags QImageIOPlugin::Capabilities

此枚举描述了QImageIOPlugin 的功能。

常量值描述
QImageIOPlugin::CanRead0x1该插件可以读取图像。
QImageIOPlugin::CanWrite0x2该插件可以写入图像。
QImageIOPlugin::CanReadIncremental0x4该插件可以增量读取图像。

Capabilities 类型是QFlags<Capability> 的 typedef。它存储 Capability 值的“或”组合。

成员函数文档

[explicit] QImageIOPlugin::QImageIOPlugin(QObject *parent = nullptr)

根据给定的parent 构建一个图像插件。该插件将由导出该插件的 moc 生成的代码自动调用。

[virtual noexcept] QImageIOPlugin::~QImageIOPlugin()

销毁图片格式插件。

您无需显式调用此方法。当插件不再被使用时,Qt 会自动销毁它。

[pure virtual] QImageIOPlugin::Capabilities QImageIOPlugin::capabilities(QIODevice *device, const QByteArray &format) const

根据device 中的数据以及格式format ,返回插件的功能。如果device 的值为0 ,则只需报告该格式是否可读或可写。 否则,应尝试确定给定的格式(或当format 为空时,插件支持的任何格式)是否可从device 读取或写入。此操作不应改变device 的状态(通常通过使用QIODevice::peek()) 实现)。

例如,如果QImageIOPlugin 支持 BMP 格式,format 为空或为"bmp" ,且设备中的数据以字符"BM" 开头,则该函数应返回CanRead 。如果format 为"bmp" ,device 为0 ,且处理程序同时支持读写操作,则该函数应返回CanRead |CanWrite 。

格式名称始终采用小写形式。

[pure virtual] QImageIOHandler *QImageIOPlugin::create(QIODevice *device, const QByteArray &format = QByteArray()) const

创建并返回一个QImageIOHandler 子类,其中device 和format 已设置。format 必须来自插件元数据中"Keys" 条目列出的值,或者为空。如果为空,则device 中的数据必须已被capabilities()方法识别(且该方法的格式同样为空)。

格式名称始终使用小写。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.