В функции QPixmap loadFromData наблюдается странное явление. В этом случае:
QPixmap pix1(":/test1.png");
QPixmap pix2(":/test2.png");
ui->labelPix1>setPixmap(pix1);
pix1 = pix2;
ui->labelPix2->setPixmap(pix1);
В приведенном выше коде элементы управления метками буксировки загрузили один и тот же объект QPixmap pix1, но pix1 был изменен до того, как его загрузил labelPix2, поэтому метки буксировки показывают разные изображения (test1.png и test2.png), это правильно.
Затем мы меняем строку «pix1 = pix2», используя вместо этого следующий блок:
QByteArray ba;
QBuffer buf(&ba);
pix2.save(&buf, "PNG");
pix1.loadFromData(ba);
В этом блоке pix1 загрузил байтовые данные из pix2 после того, как они были установлены labelPix1. Очевидно, что labelPix2 показывает изображение "test2.png", но странно, что labelPix1 также показывает изображение "test2.png" (они показывают одно и то же изображение).
Кроме того, мы вводим третий объект QPixmap pix3 и инициализируем его «test1.png», как и pix1. На этот раз labelPix2 не устанавливает pix1, а устанавливает pix3 после того, как pix1 загрузит байтовые данные из pix2. Именно так:
QPixmap pix1(":/test1.png");
QPixmap pix2(":/test2.png");
QPixmap pix3(":/test1.png");
ui->labelPix1>setPixmap(pix1);
QByteArray ba;
QBuffer buf(&ba);
pix2.save(&buf, "PNG");
pix1.loadFromData(ba);
ui->labelPix2->setPixmap(pix3);
О, labelPix1 и labelPix3 показывают одно и то же изображение "test2.png".
Я думаю, должен быть какой-то механизм. Но я не знаю, что это на самом деле. У кого-нибудь есть идеи?
QPixmapCache
.QPixmap::load
указывает: Обратите внимание, что QPixmaps добавляются автоматически в QPixmapCache при загрузке из файла; используемый ключ является внутренним и не может быть получен.. - person thuga   schedule 13.11.2014