QGraphicsScene不会立即更新

时间:2014-10-06 10:11:11

标签: qt qgraphicsscene

我在我的图形场景中绘制一个椭圆。当椭圆倾斜时,其边界的一部分不会立即出现。在我重新调整窗口大小或在我的图形场景中执行放大或缩小操作后,椭圆边界会更新,我会得到所需的完美形状。

我已将椭圆的绘画功能定义为:

QPainterPath ellipse;
ellipse.moveTo(p1.x()+majRadius, p1.y());
ellipse.arcTo(boundingRect(), 0 , 360);
QPen paintpen(Qt::black);
paintpen.setWidth(1);
painter->setRenderHint(QPainter::Antialiasing);
painter->setPen(paintpen);
painter->save();
painter->translate(p1.x(), p1.y());
painter->rotate(theta);
painter->translate(-p1.x(), -p1.y());
painter->drawPath(ellipse);
painter->restore();

我的边界矩形的定义是:

return QRectF(p1.x()-majRadius, p1.y()-minRadius,
              2*majRadius, 2*minRadius).normalized();

我附上了两个椭圆形的截图: enter image description here

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

你没有显示重要的代码,但我想我可以猜出是什么问题。

当您更改QGraphicsItem的某些对QGraphicsItem::boundingRect()产生影响的属性时,您应该QGraphicsItem::prepareGeometryChange致电update,而不是painter->setRenderHint(QPainter::Antialiasing);)。 请参阅QGraphicsItem::boundingRect的文档。

我看到的第二个问题是你搞乱了旋转平移和边界矩形。尝试只旋转画家路径而不是画家本身。

我能看到的另一个问题是,你正在以错误的方式拯救和恢复画家。保存应该在您对painter执行任何更改之前发生(在{{1}}之前的情况下,并在绘制项目完成后恢复其状态(这是好的)。