我想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 m_pixmap("res/pre.png");
    QIcon m_icon;
    m_icon.addPixmap(m_pixmap);
    ui->pre->setIcon(m_icon);
    ui->pre->setIconSize(QSize(40,40));

http://blog.csdn.net/linpuliang/article/details/38724923

最新文章

  1. 多个supplemental logging的说明与删除
  2. 用VC进行COM编程所必须掌握的理论知识
  3. call() 和 apply() ----预定义的函数方法
  4. MVC4方法行为过滤器例子(用户登录)
  5. JS版百度地图API
  6. HDU5093——Battle ships(最大二分匹配)(2014上海邀请赛重现)
  7. 剑指OFFER之用两个栈实现队列(九度OJ1512)
  8. Delphi 停靠技术的应用
  9. javascript中对条件推断语句的优化
  10. rdlc报告vs2008编辑正常,在vs2012在对错误的编辑
  11. 不要在 _ASSERT() 宏中执行功能代码 AND RELEASE版调试办法
  12. 响应式框架Bootstrap栅格系统
  13. Process 'command 'D:\jdk8\jdk\bin\java.exe'' finished with non-zero exit value 2
  14. Basic Mathematics You Should Mastered
  15. 面试总结之Google
  16. Linux crontab使用方法
  17. 有了#ifdef 为什么还需要#if defined
  18. Dynamics CRM 2011 通过数据库修改实体字段的长度需要注意的地方
  19. spss-非参数检验-K多个独立样本检验( Kruskal-Wallis检验)案例解析
  20. 【wireshark】开发环境搭建

热门文章

  1. apache安全之修改或隐藏版本信息
  2. hao123 百度品专 按品类 计算 下单数量 商品数量 下单金额?
  3. java 子类重写父类的方法应注意的问题
  4. ASP.NET MVC——Controller的激活
  5. getSharedPreferences()与getSharedPreferences()与getDefaultSharedPreferences()的区别
  6. Android - 广播机制和Service
  7. wget 使用技巧
  8. 对select into表复制的一点思考
  9. Java 去除utf-8类型的空格的方法
  10. MyBatis的学习总结三:优化MyBatis配置文件中的配置