Qt- 移动 QGraphicsItem 导致 artifacts.Leaves 落后
Qt- Moving a QGraphicsItem causes artifacts.Leaves trailes behind
当我移动 QGraphicsItem 时,怪异的工件会保留 behind.Some 部分项目不呈现,其他呈现...
在 note.cpp 我有一个形状
QPainterPath Note::shape()const{
QPainterPath path;
// path.addRect(0, 0, 50, 20);
path.moveTo(0, -80.0);
path.lineTo(0.0, 80.0);
path.lineTo(80.0, 0.0);
// path.lineTo(75.0, -30.0);
path.closeSubpath();
return path;
}
在画图函数中
QPointF *points = new QPointF[3];
points[0] = QPointF(0,-80);
points[1] = QPointF(0,80);
points[2] = QPointF(80,0);
painter->drawPolygon(points,3);
第一张图片显示当我启动应用程序时一切正常。
第二张图片显示,当我用鼠标移动一个三角形时,它得到 sliced.Other 次它会留下一些痕迹并且不会渲染三角形的所有部分
这是项目的 github link。
Github link
要重现,只需移动一个三角形。
QGraphicsItem
为了效率只重画 returns boundingRect()
方法的部分,在你的情况下 QRect(0, 0, 80, 80)
只 returns 自坐标以来必要区域的一半(0, -80)
在 boundingRect 之外。解决方案是:
QRectF Note::boundingRect() const {
return QRectF(0, -80, 80, 160) ;
// or
// return shape().boundingRect();
}
当我移动 QGraphicsItem 时,怪异的工件会保留 behind.Some 部分项目不呈现,其他呈现... 在 note.cpp 我有一个形状
QPainterPath Note::shape()const{
QPainterPath path;
// path.addRect(0, 0, 50, 20);
path.moveTo(0, -80.0);
path.lineTo(0.0, 80.0);
path.lineTo(80.0, 0.0);
// path.lineTo(75.0, -30.0);
path.closeSubpath();
return path;
}
在画图函数中
QPointF *points = new QPointF[3];
points[0] = QPointF(0,-80);
points[1] = QPointF(0,80);
points[2] = QPointF(80,0);
painter->drawPolygon(points,3);
要重现,只需移动一个三角形。
QGraphicsItem
为了效率只重画 returns boundingRect()
方法的部分,在你的情况下 QRect(0, 0, 80, 80)
只 returns 自坐标以来必要区域的一半(0, -80)
在 boundingRect 之外。解决方案是:
QRectF Note::boundingRect() const {
return QRectF(0, -80, 80, 160) ;
// or
// return shape().boundingRect();
}