簡體   English   中英

將 QPixmap 移動到 QLabel 但不復制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM