QGraphicsPathItem 中悬停元素的索引

Index of hovered element in QGraphicsPathItem

我有一个 QGraphicsPathItem,它是从笛卡尔 x、y 点列表中提取的。

确定光标何时悬停在这些点之一上的最佳(性能方面)方法是什么我目前遍历源列表并将每个点与光标位置进行比较。

此致

我通常使用QGraphicSceneitemAt()方法来检查光标下的图形项。

Qt 没有提供您想要的内置解决方案。您应该重新实现 QGraphicsScene::mouseMoveEvent and check in it which point (if any) is hovered (with a certain margin), i.e. determine which point is within a certain distance of the current mouse position (QGraphicsSceneMouseEvent::pos)。

计算最密集的任务是确定最近点。一种天真的方法是遍历所有点,但一般 optimised implementation 存在:

缓存最后一个结果并使用 triangle inequality 可能对提高此方法的性能很重要:

  • 如果当前鼠标悬停在一个点P,下次你可以验证它是否仍然悬停在这个点上。

  • 如果当前没有悬停点,并且距位置 P 的最近点(您计算最近点的最后一个鼠标位置)的距离为 d,如果出现以下情况,则不应检查是否发生悬停:norm(P - QGraphicsSceneMouseEvent::pos()) < d - hoverThreshold