QPixmapCache 类

QPixmapCache 类提供应用程序级的像素地图缓存。 更多信息...

头文件 #include <QPixmapCache>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui

公共类型

静态公共成员

intcacheLimit()
voidclear()
boolfind(const QString &key, QPixmap *pixmap)
boolfind(const QPixmapCache::Key &key, QPixmap *pixmap)
boolinsert(const QString &key, const QPixmap &pixmap)
QPixmapCache::Keyinsert(const QPixmap &pixmap)
voidremove(const QString &key)
voidremove(const QPixmapCache::Key &key)
voidsetCacheLimit(int n)

详细信息

此类是用于优化 QPixmap 绘制的工具。您可以使用它存储临时像素地图,而无需使用超过 cacheLimit 的存储空间。使用 insert() 增加像素地图,使用 find() 寻找它们,并使用 clear() 清空缓存。

QPixmapCache 不包含成员数据,只有用于访问全局像素地图缓存的静态函数。它创建一个内部 QCache 对象以为像素地图提供缓存。

缓存的键与用户提供的字符串或缓存生成的 QPixmapCache::Key 关联合并像素地图。使用 QPixmapCache::Key 作为键比使用字符串更快。对于复杂的键,字符串 API 非常方便,但对于一对一对象到像素映射,QPixmapCache::Key API 将非常高效且方便 - 在这种情况下,您可以将键作为对象成员存储。

如果使用相同的键将两个像素地图插入缓存,则最后一个像素地图将替换缓存中的第一个像素地图。这遵循 QHashQCache 类的行为。

当缓存中所有像素地图的总大小超过 cacheLimit 时,缓存将满。初始缓存限制为 10240 KB(10 MB);您可以通过调用 setCacheLimit() 并传入所需的值来更改此限制。一个像素地图大概占用 (宽度 * 高度 * 深度)/8 字节内存。

《Qt 季度刊》文章使用 QPixmapCache 进行优化解释了如何使用 QPixmapCache 通过缓存绘图结果来加速应用程序。

注意:QPixmapCache 只能在应用程序的主线程中使用。从其他线程的访问将被忽略并返回失败。

另见:QCacheQPixmap

成员函数文档

[静态] int QPixmapCache::cacheLimit()

返回缓存限制(以千字节为单位)。

默认缓存限制为 10240 KB。

另见:setCacheLimit

[静态] void QPixmapCache::clear()

从缓存中移除所有像素图。

[静态] bool QPixmapCache::find(const QString &key, QPixmap *pixmap)

在缓存中查找与给定 key 关联的像素图。如果找到像素图,此函数将 pixmap 设置为该像素图并返回 true;否则,它将 pixmap 留为原样并返回 false

示例

QPixmap pm;
if (!QPixmapCache::find("my_big_image", &pm)) {
    pm.load("bigimage.png");
    QPixmapCache::insert("my_big_image", pm);
}
painter->drawPixmap(0, 0, pm);

[静态] bool QPixmapCache::find(const QPixmapCache::Key &key, QPixmap *pixmap)

在缓存中查找与给定 key 关联的像素图。如果找到像素图,此函数将 pixmap 设置为该像素图并返回 true;否则,它将 pixmap 留为原样并返回 false。如果找不到像素图,这意味着 key 已不再有效,因此它将为下一个插入而释放。

[静态] bool QPixmapCache::insert(const QString &key, const QPixmap &pixmap)

将像素图 pixmap 的副本与 key 关联插入到缓存中。

由 Qt 库插入的所有像素图都有一个以 "$qt" 开始的键,因此您自己的像素图键永远不应该以 "$qt" 开头。

当插入像素图且缓存即将超出其限制时,它将删除像素图,直到有足够的空间插入像素图。

当需要更多空间时,最早的像素图(在缓存中最少最近被访问的)将被删除。

如果对象被插入到缓存中,则函数返回 true;否则返回 false

另见:setCacheLimit

[静态] QPixmapCache::Key QPixmapCache::insert(const QPixmap &pixmap)

将给定 pixmap 的副本插入到缓存中,并返回用于检索它的键。

当插入像素图且缓存即将超出其限制时,它将删除像素图,直到有足够的空间插入像素图。

当需要更多空间时,最早的像素图(在缓存中最少最近被访问的)将被删除。

另见:setCacheLimit() 和 replace

[静态] void QPixmapCache::remove(const QString &密钥)

从缓存中删除与密钥相关联的像素图。

[静态] void QPixmapCache::remove(const QPixmapCache::Key &密钥)

从缓存中删除与密钥相关联的像素图,并释放密钥以供未来插入。

[静态] void QPixmapCache::setCacheLimit(int 限制)

将缓存限制设置为限制千字节。

默认设置是10240 KB。

另请参阅缓存限制

© 2024 Qt公司有限公司。本文档中的文档贡献版权属于各自的拥有者。本文档的提供受GNU自由文档许可版本1.3的条款约束,由自由软件基金会发布。Qt及其相关商标是芬兰及/或其他国家的Qt公司注册商标。所有其他商标均为各自所有者的财产。