Существует странное явление в функции loadFromData QPixmap. Это тот случай:Функция загрузки QPixmapFromData использовала какой-то странный механизм для кеша?
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» (они показывают одно и то же изображение).
Кроме того, мы представляем 3-й объект 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'] (http://qt-project.org/doc/qt-5/qpixmap.html#load) указывает: * Обратите внимание, что QPixmaps автоматически добавляются в QPixmapCache при загрузке из файла; используемый ключ является внутренним и не может быть приобретен. *. – thuga
О, да. Я удалил только потому, что вы ответили на этот вопрос, и это всего лишь «механизм для кеша». Поэтому, возможно, нам не нужно так много аналогичных вопросов. Так что спасибо вам большое. –