将QPixmap移动到QLabel但不复制

时间:2012-11-16 14:33:23

标签: c++ qt

我可以将QPixmap移动到QLabel吗? 我还没有找到任何支持的成员函数 移动语义或某些函数可以将QPixmap移动到QLabel中 即使在Qt5。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();
}

看起来QLabel将创建QPixmap的全新副本 如果d-> pixmap没有指向任何东西或者他们没有 相同的cacheKey。

但我想要的行为就像是

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

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

1 个答案:

答案 0 :(得分:2)

Pixmap实现了Copy On Write概念,因此复制像素图并不是一项繁重的操作,只有当您尝试修改原始像素图时才会发生实际的数据复制。