不同的QPix地图对象打开同一个文件可能互相影响

不同的QPixmap对象打开同一个文件可能互相影响?
项目里会在不同的界面显示用户头像,当用户没有头像的时候,会有一个“默认”的图像。这里在不同的界面用QLabel来载入QPixmap,那么QPixmap会先用“默认”头像初始化,之后去读取用户的数据,如果有头像数据(QByteArray),通过loadFromData方法来载入数据。结果奇怪的现象发生了,只要是用"default.png"文件初始化过的QPixmap对象,在其中一个调用loadFromData以后,其他的都变了。以下是相关片段:

    QPixmap pix1(":/default.png");
    QPixmap pix2(":/not_default.png");
    QPixmap pix3(":/default.png");

    ui->labelPix1->setPixmap(pix1);

    QByteArray ba;
    QBuffer buf(&ba);
    pix2.save(&buf, "PNG");
    pix1.loadFromData(ba);

    ui->labelPix2->setPixmap(pix3);


以上代码中,pix1和pix3用同一文件初始化,中途pix1通过loadFromData载入pix2的数据,结果,显示出来的pix1和pix3居然都是pix2载入的图片。

求解释!
------解决思路----------------------
刚刚试了下,还真是这样。。。
不过完全可以不用QByteArray的方式啊,直接pix.load(),这样是不会出现你说的情况的
------解决思路----------------------
引用:
Quote: 引用:

刚刚试了下,还真是这样。。。
不过完全可以不用QByteArray的方式啊,直接pix.load(),这样是不会出现你说的情况的


嗯,解决方案是有的,只是之前不知道这事儿,就栽了跟头了。现在是想知道有没有牛人知道Qt在设计这个的时候是咋考量的。


这种BUG肯定是编码时没考虑到造成的,不可能是考量后弄这么个结果出来。

为了性能的提升,QPixmap 内部使用 cache 和 隐式共享 两种技术。这个BUG 是修改共享的QPixmap时内部数据没能正确 detach 造成的。 
------解决思路----------------------
cache技术,即载入同一路径的同一文件,下次直接从cache中取了。