Qt - перемещение QGraphicsItem вызывает артефакты. Оставляет следы позади - PullRequest
1 голос
/ 22 мая 2019

Когда я перемещаю QGraphicsItem, странные артефакты остаются позади. Некоторые части элемента не визуализируются, другие визуализируются ... В 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);

enter image description here enter image description here Первое изображение показывает, что все в порядке, когда я запускаю приложение.Второе изображение показывает, что когда я перемещаю треугольник с помощью мыши, он нарезается. В других случаях он оставляет некоторые следы и не отображает все части треугольника. Вот ссылка на github для проекта. Ссылка на Github

Чтобы воспроизвести, просто переместите треугольник.

1 Ответ

3 голосов
/ 22 мая 2019

QGraphicsItem для эффективности только перерисовывает секцию, которая возвращает метод boundingRect(), в вашем случае QRect(0, 0, 80, 80) возвращает только половину необходимой области, поскольку координата (0, -80) находится за пределами boundingRect.Решение:

QRectF Note::boundingRect() const {
    return QRectF(0, -80, 80, 160) ;
    // or
    // return shape().boundingRect();
}
...