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