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

时间:2015-12-10 02:49:07

标签: c++ qt qgraphicsitem qgraphicsscene

我对Qt的QGraphicsScene非常有经验,但我希望有人可以澄清boundingRect的{​​{1}}和shape方法的详细信息。据我所知,文档没有解决这个特定问题。

我有一种情况需要计算许多复杂路径的形状,其形状包括一个轻微的缓冲区,以便用户更容易点击和选择。我正在使用QGraphicsItem,而且价格昂贵。我正在尝试延迟形状计算,直到实际调用shape方法,这有助于提高性能。

现在的情况是,边界矩形是根据路径边界加上任何笔宽度计算的,这对于封闭绘制区域是正确的。但是,当计算QPainterPathStroker结果时,它大于边界矩形,因为选择缓冲区大于绘图区域。

这是一个问题吗? shape不包含boundingRect结果区域是否可以接受?或者,当我重新计算shape时,是否需要重新计算boundingRect

谢谢。

道格麦格拉思

1 个答案:

答案 0 :(得分:2)

QGraphicsItem::shape用于对象碰撞检测,命中测试以及知道鼠标点击的位置。

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

  

QGraphicsView使用它来确定项目是否需要重绘。

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