[英]move QPixmap to QLabel but not copy
我可以將 QPixmap 移動到 QLabel 中嗎? 我還沒有找到任何支持移動語義的成員函數,或者即使在 Qt5 中,某些函數也可以將 QPixmap 移動到 QLabel 中。 QLabel 的原始解決方案是將您傳遞給函數的 QPixmap 復制。
根據聲明
setPixmap(QPixmap const &)
Const& 不會增加引用計數(有什么錯誤嗎?)我認為他們不會共享相同的資源
並且實現看起來更像是復制而不是移動(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();
}
如果 d->pixmap 不指向任何東西或者它們沒有相同的緩存鍵,看起來 QLabel 將創建 QPixmap 的全新副本。
但我想要的行為就像
QPixmap *temp = origin_pixmap;
origin_pixmap = new_pixmap;
temp->release()
或者
std::string A, B;
//.............
A = std::move(B);
Pixmap 實現了Copy On Write概念,所以復制一個像素圖並不是一個繁重的操作,只有當你嘗試修改原始像素圖時才會發生實際的數據復制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.