QPixmap中load()函数使用

转自:http://blog.csdn.net/caihuisinx/article/details/7343916

我想qt 中QPixmap这个类大家都很熟悉,它可以很简单的在标签上贴图;例如:

QPixmap p;

p.load("1.png");

label->setPixmap(p);

 

就这么简单,但是我今天突然发现个问题,就是:

QPixmap p;

p.load("1.png");

label->setPixmap(p);

 p.load("2.png");

 label->setPixmap(p);

p.load("1.png");

label->setPixmap(p);

 

当用同一个p,即全局变量时,你加载图片1,显示图片1;再加载图片2,显示图片2;可当你再想变回图片一时,你再加载图片一,不好使了,变不回来了,还是显示图片二,你在加载个图片三,好使,再想变回图片二,不好使了。。。。。。

这是为神马呢???

原来,p.load()是将图片加载到缓冲区中:QPixmapCache,当你加载图片二是,图片一并没有被覆盖,此时缓冲区内有图片一和图片二,当你再次加载图片一时,以为缓冲区里应经有了,所以p.load(),直接返回true;但是图片仍是图片二,所以不能显示回图片一!

解决办法很简单,有三种办法:

一、     直接定义局部变量,这样每次都是新的缓冲区;

二、     当再次加载图片时,先将缓冲区清空,    QPixmapCache::clear();然后再加载;

三、     在初始化函数里写:QPixmapCache::setCacheLimit(1);设置缓冲区内只能放一张图片,这样就会替换原来的图片,就可以加载新的图片了!

QPixmap.save() 是一个函数,用于将 QPixmap 对象保存为指定的图像文件格式。它可以将 QPixmap 对象保存到给定的设备,如文件或内存缓冲区。这个函数的原型是: bool QPixmap::save(QIODevice *device, const char *format = Q_NULLPTR, int quality = -1) const 其,device 是一个指向 QIODevice 的指针,可以是文件、内存缓冲区等; format 是一个表示图像文件格式的字符串,如 "PNG"、"JPEG" 等; quality 是一个表示图像质量的整数值,取值范围为 0 到 100,-1 表示使用默认值。 例如,可以使用以下代码将 QPixmap 对象保存为 PNG 格式的图像文件: QPixmap pixmap; pixmap.load("image.jpg"); // 加载图像文件 pixmap.save("image.png", "PNG"); // 将图像保存为 PNG 文件 此外,QPixmap.save() 还支持将 QPixmap 对象保存到 QByteArray ,可以通过 QBuffer 将 QByteArray 作为设备进行保存。例如: QPixmap pixmap; QByteArray bytes; QBuffer buffer(&bytes); buffer.open(QIODevice::WriteOnly); pixmap.save(&buffer, "PNG"); // 将图像保存到 QByteArray 的 PNG 格式 综上所述,QPixmap.save() 函数可以用于将 QPixmap 对象以指定的图像文件格式保存到设备,还可以将 QPixmap 对象保存到 QByteArray 。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [QPixmap](https://blog.csdn.net/kenfan1647/article/details/120302461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [QPixmap编码成jpg的内存操作](https://blog.csdn.net/jklinux/article/details/71699182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值