了解 QGraphicsItem boundingRect 和 shape 方法之间的交互

Understanding Interaction between QGraphicsItem boundingRect and shape Methods

我对 Qt 的 QGraphicsScene 非常有经验,但我希望有人可以澄清有关 boundingRectshape 方法的细节 QGraphicsItem.据我所知,文档没有解决这个具体问题。

我遇到这样一种情况,我需要为许多复杂路径计算一个形状,该形状包括一个轻微的缓冲区,以使用户更容易点击路径和 select。我用的是 QPainterPathStroker,而且很贵。我目前正在尝试延迟形状计算,直到实际调用形状方法,这有助于提高性能。

现在的情况是,边界矩形是根据路径边界加上任何笔宽计算得出的,这对于包围绘制区域是正确的。但是shape的结果在计算的时候比外接矩形要大,因为selection缓冲区比绘图区域大

有问题吗? boundingRect 不包含 shape 结果区域是否可以接受?还是在重新计算 shape 时需要重新计算 boundingRect

谢谢。

道​​格·麦克格拉斯

QGraphicsItem::shape 用于对象碰撞检测、命中测试以及了解鼠标点击发生的位置。

相比之下,QGraphicsItem::boundingRect用于绘制对象,知道对象何时离开屏幕或被遮挡。正如 boundingRect 的文档所述:-

QGraphicsView uses this to determine whether the item requires redrawing.

因此,boundingRect 应该完全包含从形状函数返回的 QPainterPath