/ / przenieś QPixmap do QLabel, ale nie kopiuj - c ++, qt

przenieś QPixmap do QLabel, ale nie kopiuj - c ++, qt

Czy mogę przenieść QPixmap do QLabel? Nie znalazłem żadnej funkcji członkowskiej, która wspierałaby przesuń semantykę lub jakaś funkcja może przenieść QPixmap do QLabel nawet w Qt5. Oryginalnym rozwiązaniem QLabel jest kopiowanie QPixmap przekazujesz do funkcji.

Zgodnie z deklaracją

setPixmap(QPixmap const &)

Const i czy nie zwiększysz liczby referencyjnej (jakikolwiek błąd?) Nie sądzę, że będą dzielić ten sam zasób

a implementacja wygląda bardziej jak kopia niż ruch (Qt4.8.3)

void QLabel::setPixmap(const QPixmap &pixmap)
{
Q_D(QLabel);
if (!d->pixmap || d->pixmap->cacheKey() != pixmap.cacheKey()) {
d->clearContents();
d->pixmap = new QPixmap(pixmap);
}

if (d->pixmap->depth() == 1 && !d->pixmap->mask())
d->pixmap->setMask(*((QBitmap *)d->pixmap));

d->updateLabel();
}

wygląda na to, że QLabel utworzy zupełnie nową kopię QPixmap jeśli d-> pixmap nie wskazuje na nic lub nie ma ten sam cacheKey.

Ale zachowanie, którego pragnę, jest czymś w rodzaju

QPixmap *temp = origin_pixmap;
origin_pixmap = new_pixmap;
temp->release()

lub

std::string A, B;
//.............
A = std::move(B);

Odpowiedzi:

2 dla odpowiedzi № 1

Wdraża Pixmap Kopiuj przy zapisie Koncepcja, więc kopiowanie mapy pikapowej nie jest ciężką operacją, a faktyczna kopia danych stanie się tylko wtedy, gdy spróbujesz zmodyfikować oryginalną pixmapę.