本页内容

QIconEngine Class

QIconEngine 类为QIcon 渲染器提供了一个抽象基类。更多内容...

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

公共类型

struct ScaledPixmapArgument
enum IconEngineHook { IsNullHook, ScaledPixmapHook }

公共函数

QIconEngine()
virtual ~QIconEngine()
virtual QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state)
virtual void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state)
virtual void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state)
virtual QList<QSize> availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off)
virtual QIconEngine *clone() const = 0
virtual QString iconName()
virtual bool isNull()
virtual QString key() const
virtual void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) = 0
virtual QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state)
virtual bool read(QDataStream &in)
virtual QPixmap scaledPixmap(const QSize &size, QIcon::Mode mode, QIcon::State state, qreal scale)
virtual void virtual_hook(int id, void *data)
virtual bool write(QDataStream &out) const

详细描述

图标引擎为 `QIcon` 提供渲染函数。每个图标都有一个对应的图标引擎,负责根据请求的大小、模式和状态绘制图标。

图标由paint() 函数进行渲染,此外,还可以通过pixmap() 函数将图标作为像素图获取(默认实现仅使用paint() 来实现这一点)。addPixmap() 函数可用于向图标引擎添加新的像素图,QIcon 便利用此函数来添加专门的自定义像素图。

paint()、pixmap() 和addPixmap() 这三个函数均为虚函数,因此可以在 QIconEngine 的子类中重新实现。

另请参阅 QIconEnginePlugin 。

成员类型文档

enum QIconEngine::IconEngineHook

这些枚举值用于virtual_hook() 方法,以便在不破坏二进制兼容性的前提下,向图标引擎发起额外查询。

常量值描述
QIconEngine::IsNullHook3允许查询该引擎是否表示一个空图标。virtual_hook() 函数的data 参数是一个指向 bool 类型的指针,如果图标为空,则可将其设置为 true。该枚举值在 Qt 5.7 中新增。
QIconEngine::ScaledPixmapHook4提供了一种根据给定缩放比例(通常等于设备像素比例)获取缩放后位图的方法。virtual_hook() 函数的data 参数是一个ScaledPixmapArgument 指针,其中包含输入和输出参数。该枚举值在 Qt 5.9 中添加。

另请参阅 virtual_hook()。

成员函数文档

QIconEngine::QIconEngine()

构建图标引擎。

[virtual noexcept] QIconEngine::~QIconEngine()

销毁图标引擎。

[virtual] QSize QIconEngine::actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state)

返回引擎为请求的size 、mode 和state 提供的图标的实际尺寸。默认实现返回给定的size 。

返回的大小以设备无关像素为单位(这对于高 DPI 位图而言尤为重要)。

[virtual] void QIconEngine::addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state)

由QIcon::addFile() 调用。从指定文件中添加一个专用像素图,其参数为fileName 、size 、mode 和state 。默认的基于像素图的引擎会存储所有提供的文件名,并在需要时加载像素图;如果像素图的大小与请求的图标大小匹配,则不会使用缩放后的像素图。 实现可缩放矢量格式的自定义图标引擎可以忽略任何额外文件。

[virtual] void QIconEngine::addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state)

由QIcon::addPixmap() 调用。为给定的mode 和state 添加一个专门的pixmap 。默认的基于位图的引擎会存储任何提供的位图,如果位图的大小与请求的图标大小匹配,则会使用这些位图代替缩放后的位图。实现可缩放矢量格式的自定义图标引擎可以忽略任何额外的位图。

[virtual] QList<QSize> QIconEngine::availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off)

返回引擎中包含的所有图像的尺寸,这些图像对应于特定的mode 和state 。

[pure virtual] QIconEngine *QIconEngine::clone() const

重写此方法,使其返回该图标引擎的克隆对象。

[virtual] QString QIconEngine::iconName()

返回用于创建引擎的名称(如果存在)。

[virtual] bool QIconEngine::isNull()

如果该图标引擎表示一个空的QIcon ,则返回true。

注意:如果 图标引擎未重写此函数,则实际操作将由virtual_hook()方法完成,因此该方法取决于图标引擎的支持情况,可能无法在所有图标引擎上正常工作。

[virtual] QString QIconEngine::key() const

返回一个用于标识此图标引擎的键。

[pure virtual] void QIconEngine::paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state)

使用给定的painter ,将图标绘制到矩形rect 内,并使用指定的mode 和state 。

[virtual] QPixmap QIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state)

将图标作为像素图返回,并包含必需的size 、mode 和state 。默认实现会创建一个新的像素图,并调用paint()来填充它。

[virtual] bool QIconEngine::read(QDataStream &in)

从QDataStream in 读取图标引擎的内容。如果成功读取内容,则返回true;否则返回false 。

QIconEngine的默认实现始终返回 false。

[virtual] QPixmap QIconEngine::scaledPixmap(const QSize &size, QIcon::Mode mode, QIcon::State state, qreal scale)

返回一个像素图,其参数为size 、mode 、state 和scale 。

scale 参数通常等于显示器的设备像素比。尺寸以设备独立像素为单位。

注意:如果 图标引擎未重新实现此函数,实际操作将由virtual_hook() 方法完成,因此该方法取决于图标引擎的支持情况,可能无法在所有图标引擎上正常工作。

注意:某些 引擎可能会将 `scale ` 强制转换为整数。

另请参阅 ScaledPixmapArgument 。

[virtual] void QIconEngine::virtual_hook(int id, void *data)

一种允许在不添加新虚拟方法(且不破坏二进制兼容性)的情况下扩展QIconEngine 的额外方法。data 的实际操作和格式取决于id 参数,该参数实际上是IconEngineHook 枚举中的一个常量。

另请参阅 IconEngineHook 。

[virtual] bool QIconEngine::write(QDataStream &out) const

将该引擎的内容写入QDataStream out 。如果内容已写入,则返回true ;否则返回false 。

QIconEngine的默认实现始终返回 false。

© 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.