当前位置: 首页 > article >正文

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);

}

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

           


http://www.kler.cn/a/388360.html

相关文章:

  • LeetCode 83 :删除排链表中的重复元素
  • 福特汽车物流仓储系统WMS:开源了,可直接下载
  • 前端(八)js介绍(1)
  • 理解并使用 Linux 内核的字符设备
  • 基于WEB的房屋出租管理系统设计
  • 基于earthSDK三维地图组件开发
  • 解决 Vue3、Vite 和 TypeScript 开发环境下跨域的问题,实现前后端数据传递
  • b4tman / docker-squid 可快速安装运行的、容器型代理服务器 + podman
  • contos7.9 部署3节点 hadoop3.4 集群 非高可用
  • 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--访问权限中间件
  • 深度学习:NAT Decoder 详解
  • 【GPTs】EmojiAI:轻松生成趣味表情翻译
  • Java进阶嵌套循环:十.冒泡与选择算法排序
  • 命令行工具PowerShell使用体验
  • 【C++】STL中的list容器详解及常用函数用法
  • UOS启动器
  • CI/CD 实践总结
  • HTB:Explore[WriteUP]
  • [Android]查找java类中声明为native方法的具体实现方法
  • 「QT」几何数据类 之 QPolygon 多边形类
  • 增删改查基础项目总结
  • 智能机器人技术:AI 如何赋予机器智能行动
  • 如何使用 Puppeteer 和 Browserless 抓取亚马逊产品数据?
  • 【SQL实验】更新操作
  • 量子计算及其在密码学中的应用
  • Element UI组件Dialog显示闪动问题【解决方案】