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();
我已附加的椭圆两例的屏幕截图:
如何解决这个问题?
答
你没有显示重要的代码,但我想我可以猜测出现了什么问题。
当您更改QGraphicsItem
一些财产对QGraphicsItem::boundingRect()
影响,你应该叫QGraphicsItem::prepareGeometryChange
不仅没有update
。
请参阅QGraphicsItem::boundingRect的文档。
我看到的第二个问题是你已经搞乱了旋转平移和边界矩形。尝试旋转画家路径而不是画家本身。
我可以看到的另一个问题是,你正在挽救和恢复一个错误的代理画家。在对画家进行任何更改之前,应该先进行保存(在您的情况下,painter->setRenderHint(QPainter::Antialiasing);)
之前,并且在完成画的项目完成后恢复其状态(这是好的)
感谢您指出了如此多的错误。如果你可以提供一些提示,我将无法知道如何使用它。 – 2014-10-06 13:58:50
我应该在哪里调用preparegeometrychange函数? – 2014-10-06 15:38:20
每种方法都会影响到'p1','majRadius','minRadius'和'theta'对'boundingRect()'有影响,所以这个方法应该调用'preparegeometrychange'。 – 2014-10-06 21:13:08