c++ - 理解 QGraphicsItemboundingRect 和 shape 方法之间的交互

标签 c++ qt qgraphicsitem qgraphicsscene

我对 Qt 的 QGraphicsScene 非常有经验,但我希望有人能够澄清有关 boundingRectshape 的细节QGraphicsItem 的方法。据我所知,该文档没有解决这个特定的问题。

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

现在的情况是,边界矩形是根据路径边界加上任何画笔宽度计算得出的,这对于包围绘制区域是正确的。然而,当计算shape结果时,它大于边界矩形,因为选择缓冲区大于绘图区域。

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

谢谢。

道格·麦格拉思

最佳答案

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

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

QGraphicsView uses this to determine whether the item requires redrawing.

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

关于c++ - 理解 QGraphicsItemboundingRect 和 shape 方法之间的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34192892/

相关文章:

qt - 子类化 QGraphicsView 并设置 drawBackground

qt - 如何在转换后找到 QGraphicsItem 的大小

c++ - 列出 DLL 的导出函数

c++ - 是否可以在模板类中编写一个静态可变参数模板函数,该函数可以采用 T 类型的 N 个参数?

c++ - Qtableview搜索栏

linux - 如何从命令行传递 QMAKE 变量?

c++ - 在 d2i_RSAPrivateKey_fp() 中崩溃

c++ - 通过不同类型的引用传递参数时如何打字

c++ - QML/real 和 C++/float 之间的 Qt 类型错误

qt - 如何去除qgraphicsview中绘制的鬼线