zoukankan      html  css  js  c++  java
  • QPixmap的缓冲区

    我想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);设置缓冲区内只能放一张图片,这样就会替换原来的图片,就可以加载新的图片了!

    http://blog.csdn.net/a324539017/article/details/6567186

  • 相关阅读:
    java 集合类 *****
    Vector & ArrayList Hashtable & HashMap ArrayList & LinkedList
    全排列 递归实现
    JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比
    数据库之“视图”
    Qt开发经验小技巧1-10
    Qt编写安防视频监控系统14-本地回放
    Qt编写安防视频监控系统13-视频存储
    Qt编写图片及视频TCP/UDP网络传输
    Qt编写气体安全管理系统29-跨平台
  • 原文地址:https://www.cnblogs.com/findumars/p/6350239.html
Copyright © 2011-2022 走看看