我遇到了为拖动事件创建的pixmaps的问题。对于我派生的QGraphicsRectItem的拖动事件,我从该项创建了一个半透明的像素图。
在调试版本中,一切看起来都很好。
但是在发布版本中,拖动像素图有一些周期性和随机的伪像
这是代码:
QPixmap MyGraphicsRectItem::toPixmap() const
{
QRect r = boundingRect().toRect();
QPixmap pixmap(r.width(), r.height());
QColor dragColor(color);
dragColor.setAlphaF(0.5);
QPainter painter;
painter.begin(&pixmap);
painter.fillRect(pixmap.rect(), dragColor);
painter.setPen(Qt::white);
QFont font("SegoeUI");
font.setBold(true);
painter.setFont(font);
painter.drawText(pixmap.rect(), QString(" ") + textItem->toPlainText());
if (pixItem != nullptr) {
painter.setOpacity(0.5);
painter.drawPixmap(pixItem->pos(), pixItem->pixmap());
}
painter.end();
return pixmap;
}
这可能是一种记忆问题吗?
答案 0 :(得分:1)
使用未初始化的数据初始化QPixmap。在Debug中,这通常设置为固定模式,但在Release中它是垃圾。
在使用之前,你应该用透明色填充像素图。
QPixmap :: QPixmap(int width,int height)
构造具有给定宽度和高度的像素图。如果宽度或高度为零,则构造空像素图。
警告:这将创建一个包含未初始化数据的QPixmap。调用fill()以使用适当的颜色填充像素图,然后使用QPainter进行绘制。
(来自Qt Docs)