Доброго дня. Возникла проблема, никак не могу с ней разобраться. Есть класс унаследованный от QGraphicsItem, который должен отрисовывать окружность (чистый addEllipse не подходит, т.к. есть доп. функционал), ему устанавливаются ширина лини и радиус круга, при отрисовке справа и снизу не перерисовывается несколько пикселей, пока не случится полной перерисовки сцены (на картинке желтое - круг нормально отрисовавшийся при прокрутке QGraphicsView, розовое - та часть, которая перерисовалась при наведении мышки и смене цвета. Центр рисуется отдельным классом, объект которого является дочерним к объекту окружности.
Изначально думал, что дело в boundingRect, но я расширял его с огромным запасом (+100 пикселей в каждую сторону) и это никак не влияло. Помогите найти, где ошибка (подозреваю, что она тупая и банальная, но не вижу её в упор).
Код класса:
void CircleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget)
{
Q_UNUSED(widget);
QPen oldPen=painter->pen();
QPen pen;
pen.setWidth(width_);
if(is_highlighted_)
pen.setColor(highlight_color_);
else
pen.setColor(color_);
painter->setPen(pen);
painter->drawEllipse(-radius_,-radius_,2*radius_+1,2*radius_+1);
painter->setPen(oldPen);
}
QRectF CircleItem::boundingRect() const
{
int offset;
offset = width_;
return QRectF(-radius_-offset,-radius_-offset,2*radius_+offset,2*radius_+offset);
}
QPainterPath CircleItem::shape() const
{
QPainterPath path;
int offset;
offset = width_;
path.addEllipse(-radius_-offset,-radius_-offset,2*radius_+offset,2*radius_+offset);
path.addEllipse(-radius_+offset,-radius_+offset,2*radius_-offset,2*radius_-offset);//Два эллипса, чтобы определять наведение мышью только на саму окружность, а не её внутренности
return path;
}
void CircleItem::setWidth(uint32 width)
{
prepareGeometryChange();
width_ = width;
}
void setRadius(uint32 radius)
{
prepareGeometryChange();
radius_ = radius;
}