qt QPixmapCache详解
1、概述
QPixmapCache是Qt框架中提供的一个功能强大的图像缓存管理工具类。它允许开发者在全局范围内缓存QPixmap对象,从而有效减少图像的重复加载,提高图像加载和显示的效率。这对于需要频繁加载和显示图像的用户界面应用来说尤为重要,能够显著提升用户体验。
2、重要方法
QPixmapCache类提供了一组用于插入、查找和删除缓存图像的静态方法,这些方法使用QString类型的key来标识和检索缓存中的QPixmap对象。以下是几个重要的方法:
find(const QString &key, QPixmap &pixmap)
: 根据指定的key在缓存中查找QPixmap对象。如果找到匹配的缓存图像,该方法返回true,并将缓存图像复制到pixmap参数中;如果未找到,则返回false,并忽略pixmap参数。insert(const QString &key, const QPixmap &pixmap)
: 将指定的QPixmap对象插入到缓存中,并使用给定的key进行标识。如果插入成功,返回true;如果缓存已满或key已存在,则返回false。clear()
: 清除缓存中的所有QPixmap对象。这通常用于释放不再需要的缓存资源。- remove(const Qstring &key):从缓存中移除指定关键字的位。
- cacheLimit():返回缓存限制的最大字节数。
- setCacheLimit(int n):设置缓存限制的最大字节数。
- totalUsed()const:返回当前缓存中所有位图占用的字节数。
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
setWindowTitle("QPixmapCache Example");
resize(800, 600);
// 创建标签用于显示图片
QLabel *label = new QLabel(this);
label->setAlignment(Qt::AlignCenter);
// 创建按钮用于加载图片
QPushButton *loadButton = new QPushButton("Load Image1");
QPushButton *loadButton2 = new QPushButton("Load Image2");
QPushButton *clearCacheButton = new QPushButton("Clear Cache");
// 连接按钮信号与槽函数
connect(loadButton, &QPushButton::clicked, this, [label]() {
QPixmap pixmap;
QString key = "my_image_key";
if (!QPixmapCache::find(key, &pixmap)) {
// 缓存中未找到,从文件中加载
pixmap.load(":/res/c.png");
QPixmapCache::insert(key, pixmap);
}
else
qDebug() << "no find";
label->setPixmap(pixmap);
});
connect(loadButton2, &QPushButton::clicked, this, [label]() {
QPixmap pixmap;
QString key = "my_image_key2";
if (!QPixmapCache::find(key, &pixmap)) {
// 缓存中未找到,从文件中加载
pixmap.load(":/res/car.png");
QPixmapCache::insert(key, pixmap);
}
else
qDebug() << "no find";
label->setPixmap(pixmap);
});
connect(clearCacheButton, &QPushButton::clicked, this, []() {
QPixmapCache::clear();
});
// 布局管理
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(loadButton);
layout->addWidget(loadButton2);
layout->addWidget(clearCacheButton);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(label);
mainLayout->addLayout(layout);
QWidget *centralWidget = new QWidget;
centralWidget->setLayout(mainLayout);
setCentralWidget(centralWidget);
}
觉得有帮助的话,打赏一下呗。。