2012-11-16 76 views
2

我可以將QPixmap移動到QLabel中嗎? 我還沒有發現任何支持 移動語義的成員函數,或者某些函數可能會將QPixmap移動到QLabel 中,即使在Qt5中。QLabel的原始解決方案是將您傳入的QPixmap複製到函數中。將QPixmap移動到QLabel但不復制

根據宣言

setPixmap(QPixmap 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(); 
} 

看起來像QLabel將創建一個全新的QPixmap副本 如果d-> pixmap不指向任何東西或者它們不具有相同的cacheKey。

但我想要的行爲是一樣的東西

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

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

回答

2

點陣圖實現Copy On Write概念,所以複製一個像素圖是不是一個沉重的操作和實際的數據拷貝,如果你只會發生嘗試修改原始像素圖。

+0

謝謝,我會看看它 – StereoMatching