QGraphicsPathItem 中悬停元素的索引
Index of hovered element in QGraphicsPathItem
我有一个 QGraphicsPathItem,它是从笛卡尔 x、y 点列表中提取的。
确定光标何时悬停在这些点之一上的最佳(性能方面)方法是什么我目前遍历源列表并将每个点与光标位置进行比较。
此致
我通常使用QGraphicScene
的itemAt()
方法来检查光标下的图形项。
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 存在:
- QuadTree:二维实现
- k-d tree:多维实现
- Nearest Neighbor Search:概览
缓存最后一个结果并使用 triangle inequality 可能对提高此方法的性能很重要:
如果当前鼠标悬停在一个点P
,下次你可以验证它是否仍然悬停在这个点上。
如果当前没有悬停点,并且距位置 P
的最近点(您计算最近点的最后一个鼠标位置)的距离为 d
,如果出现以下情况,则不应检查是否发生悬停:norm(P - QGraphicsSceneMouseEvent::pos()) < d - hoverThreshold
我有一个 QGraphicsPathItem,它是从笛卡尔 x、y 点列表中提取的。
确定光标何时悬停在这些点之一上的最佳(性能方面)方法是什么我目前遍历源列表并将每个点与光标位置进行比较。
此致
我通常使用QGraphicScene
的itemAt()
方法来检查光标下的图形项。
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 存在:
- QuadTree:二维实现
- k-d tree:多维实现
- Nearest Neighbor Search:概览
缓存最后一个结果并使用 triangle inequality 可能对提高此方法的性能很重要:
如果当前鼠标悬停在一个点
P
,下次你可以验证它是否仍然悬停在这个点上。如果当前没有悬停点,并且距位置
P
的最近点(您计算最近点的最后一个鼠标位置)的距离为d
,如果出现以下情况,则不应检查是否发生悬停:norm(P - QGraphicsSceneMouseEvent::pos()) < d - hoverThreshold