Когда я перемещаю 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);
Первое изображение показывает, что все в порядке, когда я запускаю приложение.
На втором рисунке показано, что когда я перемещаю треугольник с помощью мыши, он разрезается. В других случаях он оставляет некоторые следы и не отображает все части треугольника.
Вот ссылка на гитхаб проекта.
Ссылка на гитхаб
Чтобы воспроизвести, просто переместите треугольник.
QGraphicsItem
для эффективности перекрашивайте только часть, которая возвращает метод boundingRect()
, в вашем случае QRect(0, 0, 80, 80)
возвращает только половину необходимой области, так как координата (0, -80)
находится за пределами boundingRect. Решение:
QRectF Note::boundingRect() const {
return QRectF(0, -80, 80, 160) ;
// or
// return shape().boundingRect();
}
Да, вы правы. Мне нужно указать x, y (происхождение) моей формы, ширину и высоту. Спасибо.