Qt QGraphicscene不会立即更新

Qt QGraphicscene不会立即更新,qt,qgraphicsscene,Qt,Qgraphicsscene,我正在图形场景中绘制一个椭圆。当椭圆倾斜时,其边界的一部分不会立即出现。在我重新调整窗口大小或在图形场景中执行放大或缩小操作后,椭圆边界将更新,并获得所需的完美形状 我已将椭圆的绘制函数定义为: QPainterPath ellipse; ellipse.moveTo(p1.x()+majRadius, p1.y()); ellipse.arcTo(boundingRect(), 0 , 360); QPen paintpen(Qt::black); paintpen.setWidth(1);

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

我已将椭圆的绘制函数定义为:

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();
我附上了两个椭圆案例的截图:


如何解决这个问题?

您没有显示重要的代码,但我想我可以猜出问题出在哪里

当您更改对
QGraphicsItem::boundingRect()有影响的
QGraphicsItem::preparegeometricchange
的某些属性时,您应该调用
QGraphicsItem::preparegeometricchange
而不仅仅是
更新
请参阅的文档

我看到的第二个问题是,你把旋转、平移和矩形边界搞糟了。尝试仅旋转画师路径,而不是画师本身


我能看到的另一个问题是,你以错误的方式保存和恢复了一位画家。保存应该在您对painter执行任何更改之前进行(在您的例子中是在
painter->setRenderHint(QPainter::antialasing);)
之前),并在项目绘制完成后恢复其状态(这是可以的)。

感谢您指出了这么多错误。我遵循了文档中提供的平移和旋转示例。谈到
preparegeometrychange
,如果您能提供一些提示的话,我还不知道如何使用它。我应该在哪里调用
preparegeometrychange
函数?每个对
p1
有影响的方法、
majRadius
minRadius
theta
都对
boundingRect()有影响
因此此方法应调用
preparegeometricchange