《QT从基础到进阶·十二》QPixmap.load加载图片不更新问题

简介: 《QT从基础到进阶·十二》QPixmap.load加载图片不更新问题

问题:多次用QPixmap加载图片时,图片无法更新。

示例代码如下:

QPixmap pixmap;
pixmap.load("1.png"); //加载图片1
label->setPixmap(pixmap); //设置到label中显示
pixmap.load("2.png"); //加载图片2
label->setPixmap(pixmap); //设置到label中显示
pixmap.load("1.png"); //加载图片1
label->setPixmap(pixmap); //设置到label中显示

我们期望的结果是当代码第一条label->setPixmap(pixmap); 时会在label上显示图片1,代码走到第二条label->setPixmap(pixmap); 时,label中的图片会被更新为图片2,代码走到第三条label->setPixmap(pixmap); 时,label中的图片又会被更新为图片1。

实际情况是label先显示图片1正常,从图片1跟新为图片2也正常,再从图片2跟新为图片1就无法跟新了,还是依旧显示图片2,这是为啥??

原因:QPixmap中的load函数是将图片加载到缓冲区,即QPixmapCache中存放图片,当把第一张图片加载到缓冲区会显示图片1,当加载第二张图片时缓冲区的图片1并没有被覆盖,实际是缓冲区存了两张图片,并显示图片2,当再次加载图片1到缓冲区时,这时QPixmapCache认为已经有了图片1,会直接返回true,缓冲区的图片排列顺序并没有发生变化,固依旧显示图片2。

解决办法:

(1)QPixmap直接定义局部变量,这样每次会开辟新的缓冲区

(2)每次加载图片时先清空缓冲区,调用QPixmapCache::clear()

(3)设置QPixmapCache缓冲区只能存放一张图片,QPixmapCache::setCacheLimit(1), 这样保证每次存放的图片都能覆盖前一张。


相关文章
|
Linux iOS开发 UED
探索Qt折线图之美:一次详尽的多角度解析
探索Qt折线图之美:一次详尽的多角度解析
2423 0
|
UED
【Qt 学习笔记】Qt窗口 | 工具栏 | QToolBar的使用及说明
【Qt 学习笔记】Qt窗口 | 工具栏 | QToolBar的使用及说明
2144 2
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
3297 4
《QT从基础到进阶·二十六》绘制多个图形项(QGraphicsRectItem,QGraphicsLineItem,QGraphicsPolygonItem)
《QT从基础到进阶·二十六》绘制多个图形项(QGraphicsRectItem,QGraphicsLineItem,QGraphicsPolygonItem)
516 0
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
2579 1
《QT从基础到进阶·二十一》QGraphicsView、QGraphicsScene和QGraphicsItem坐标关系和应用
《QT从基础到进阶·五》组件与组件或布局与布局的重叠问题
《QT从基础到进阶·五》组件与组件或布局与布局的重叠问题
728 0
|
缓存 Linux 定位技术
Qt绘图指南:掌握高效、美观的GUI设计之道
Qt绘图指南:掌握高效、美观的GUI设计之道
2781 1
《QT从基础到进阶·十三》QPixmap、QImage的缩放——
《QT从基础到进阶·十三》QPixmap、QImage的缩放——
749 0
《QT从基础到进阶·十五》用鼠标绘制矩形(QGraphicsView、QPainter、QGraphicsRectItem)
《QT从基础到进阶·十五》用鼠标绘制矩形(QGraphicsView、QPainter、QGraphicsRectItem)
1101 0
|
Ubuntu 安全 Linux
Grub2启动项的修改和相关操作命令
**GRUB2**是Linux的主要引导加载程序,用于启动时显示菜单。要修改启动项,应编辑`/etc/default/grub`,然后运行`grub-mkconfig -o /boot/grub/grub.cfg`更新配置,最后确保`grub.cfg`只读。若需修复引导问题,可启动到Ubuntu Live CD/DVD,挂载根和boot分区,重新安装GRUB2,并根据需要修复`grub.cfg`或Windows引导项。遵循此指南,能安全管理GRUB2并解决引导问题。