QPixmap의 loadFromData 함수에 이상한 현상이 있습니다. 이 경우 : 위의 코드에서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 and test2.png), 맞습니다.
그런 다음 우리가 라인 "pix1 = PIX2"를 변경하는 대신 다음 블록을 사용 :이 labelPix1에 의해 잘 살고 난 후에QByteArray ba;
QBuffer buf(&ba);
pix2.save(&buf, "PNG");
pix1.loadFromData(ba);
를이 블록에서 pix1는 PIX2에서 바이트 datas를로드. 분명히 labelPix2는 이미지 "test2.png"를 보여 주지만, labelPix1도 이미지 "test2.png"를 보여줍니다 (동일한 이미지를 보여줍니다).
또한 3 번째 QPixmap 개체 pix3을 소개하고 pix1과 동일한 "test1.png"로 시작합니다. 이 시간 labelPix2는 pix1을 설정하지 않고 pix1이 pix2에서 바이트 데이터를로드 한 후에 pix3을 설정합니다. 다음과 같이하십시오 :
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)는 다음과 같이 설명합니다 : * QPixmap은 파일에서로드 될 때 자동으로 QPixmapCache에 추가됩니다. 사용 된 키는 내부적이며 획득 할 수 없습니다. *. – thuga
오, 그래. 나는 당신이이 질문에 답했고 단지 "캐시 메커니즘"에 관해서 삭제 했었습니다. 어쩌면 그렇게 많은 비슷한 질문이 필요하지 않을 수도 있습니다. 정말 고마워요. –