QPixmapCache 类
QPixmapCache 类提供应用程序级的像素地图缓存。 更多信息...
头文件 | #include <QPixmapCache> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
公共类型
类 | 键 |
静态公共成员
int | cacheLimit() |
void | clear() |
bool | find(const QString &key, QPixmap *pixmap) |
bool | find(const QPixmapCache::Key &key, QPixmap *pixmap) |
bool | insert(const QString &key, const QPixmap &pixmap) |
QPixmapCache::Key | insert(const QPixmap &pixmap) |
void | remove(const QString &key) |
void | remove(const QPixmapCache::Key &key) |
void | setCacheLimit(int n) |
详细信息
此类是用于优化 QPixmap 绘制的工具。您可以使用它存储临时像素地图,而无需使用超过 cacheLimit 的存储空间。使用 insert() 增加像素地图,使用 find() 寻找它们,并使用 clear() 清空缓存。
QPixmapCache 不包含成员数据,只有用于访问全局像素地图缓存的静态函数。它创建一个内部 QCache 对象以为像素地图提供缓存。
缓存的键与用户提供的字符串或缓存生成的 QPixmapCache::Key 关联合并像素地图。使用 QPixmapCache::Key 作为键比使用字符串更快。对于复杂的键,字符串 API 非常方便,但对于一对一对象到像素映射,QPixmapCache::Key API 将非常高效且方便 - 在这种情况下,您可以将键作为对象成员存储。
如果使用相同的键将两个像素地图插入缓存,则最后一个像素地图将替换缓存中的第一个像素地图。这遵循 QHash 和 QCache 类的行为。
当缓存中所有像素地图的总大小超过 cacheLimit 时,缓存将满。初始缓存限制为 10240 KB(10 MB);您可以通过调用 setCacheLimit() 并传入所需的值来更改此限制。一个像素地图大概占用 (宽度 * 高度 * 深度)/8 字节内存。
《Qt 季度刊》文章使用 QPixmapCache 进行优化解释了如何使用 QPixmapCache 通过缓存绘图结果来加速应用程序。
注意:QPixmapCache 只能在应用程序的主线程中使用。从其他线程的访问将被忽略并返回失败。
成员函数文档
[静态]
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公司注册商标。所有其他商标均为各自所有者的财产。