QGraphicsScene不立即更新

问题描述:

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

如何解决这个问题?

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

当您更改QGraphicsItem一些财产对QGraphicsItem::boundingRect()影响,你应该叫QGraphicsItem::prepareGeometryChange不仅没有update
请参阅QGraphicsItem::boundingRect的文档。

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

我可以看到的另一个问题是,你正在挽救和恢复一个错误的代理画家。在对画家进行任何更改之前,应该先进行保存(在您的情况下,painter->setRenderHint(QPainter::Antialiasing);)之前,并且在完成画的项目完成后恢复其状态(这是好的)

+0

感谢您指出了如此多的错误。如果你可以提供一些提示,我将无法知道如何使用它。 – 2014-10-06 13:58:50

+0

我应该在哪里调用preparegeometrychange函数? – 2014-10-06 15:38:20

+0

每种方法都会影响到'p1','majRadius','minRadius'和'theta'对'boundingRect()'有影响,所以这个方法应该调用'preparegeometrychange'。 – 2014-10-06 21:13:08