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();
}