2

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 が何も指していないか、同じ cacheKey を持っていない場合、QLabel は QPixmap の新しいコピーを作成するようです。

しかし、私が望む動作は次のようなものです

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

また

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

1 に答える 1

2

ピックスマップはコピー オン ライトの概念を実装しているため、ピックスマップのコピーは重い操作ではなく、元のピックスマップを変更しようとした場合にのみ実際のデータ コピーが行われます。

于 2012-11-16T14:45:56.597 に答える