qt QPixmapCache详解

news/2024/11/8 18:25:05 标签: qt
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);

}

觉得有帮助的话,打赏一下呗。。

           


http://www.niftyadmin.cn/n/5744280.html

相关文章

vue种ref跟reactive的区别?

‌Vue中的ref和reactive的主要区别在于它们处理的数据类型、实现原理以及使用方式。‌ 处理的数据类型 ‌ref‌&#xff1a;可以处理基本数据类型&#xff08;如数字、字符串、布尔值&#xff09;和对象。ref通过Object.defineProperty()的get和set方法来实现响应式&#xff…

11.07学习

一、三中代码解决鸡兔同笼问题 1.直接解方程 #include <stdio.h> int main() { int heads, feet, chickens, rabbits; printf("请输入总头数&#xff1a;"); scanf("%d", &heads); printf("请输入总脚数&#xff1a;"); scanf(…

MySQL分组查询

问题&#xff1a;查询员工表中,每个不同部门分别的平均工资 分组查询&#xff1a;group by关键字实现分组,group by放在where条件语句之后,order by放置中group by的后面,一会儿还会学到的having关键字,总体的循序先后为&#xff1a; where条件 , group by 分组语句 , having…

关于Redis

Redis 基础 什么是 Redis&#xff1f; Redis &#xff08;REmote DIctionary Server&#xff09;是一个基于 C 语言开发的开源 NoSQL 数据库&#xff08;BSD 许可&#xff09;。与传统数据库不同的是&#xff0c;Redis 的数据是保存在内存中的&#xff08;内存数据库&#xf…

004-Kotlin界面开发快速入水之TicTacToe

程序界面和效果 快速入水 要学习一样跟程序设计有关的东西&#xff0c;最好的办法始终是把手打湿&#xff0c;整一个能够运行&#xff0c;可以实验的东西出来。 也只有在程序开发中&#xff0c;我们才能想一个魔法师而不是魔术师&#xff0c;我们真的能够创造一个东西。而且编…

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置...-CSDN博客 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明-CSDN博客 工作…

EL表达式和JSTL表达式(详解)

1.EL表达式&#xff1a; 导包&#xff1a; isELIgnored"false"就可以用了&#xff0c;这个包是用的tomcat内置的,如果不行的话&#xff0c;就需要导包 <% page contentType"text/html;charsetUTF-8" isELIgnored"false" language"jav…

Java Iterator 实现杨辉三角

一、问题描述 杨辉三角定义如下&#xff1a; 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 4 6 4 1/ \ / \ / \ / \ / \ 1 5 10 10 5 1 把每一行看做一个list&#xff0c;试写一个 Iterator&#xff0c;不断输出下一行的 list&#xf…