了解 QGraphicsItem boundingRect 和 shape 方法之间的交互
Understanding Interaction between QGraphicsItem boundingRect and shape Methods
我对 Qt 的 QGraphicsScene
非常有经验,但我希望有人可以澄清有关 boundingRect
和 shape
方法的细节 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
。
我对 Qt 的 QGraphicsScene
非常有经验,但我希望有人可以澄清有关 boundingRect
和 shape
方法的细节 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
。