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 № 1Wdraż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ę.