QGraphicsPathItem中悬停元素的索引

时间:2017-06-06 15:15:16

标签: qt shape qgraphicsview

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

确定何时将光标悬停在其中一个点上的最佳(性能明智)方法我现在遍历源列表并将每个点与光标位置进行比较。

此致

2 个答案:

答案 0 :(得分:0)

我通常使用 def first_before_second_noop(op_first, op_second): with tf.control_dependencies([op_first]): op_second tf.group(op_second, tf.no_op()) return op_second 的{​​{1}}方法来检查光标下的图形项目。

答案 1 :(得分:0)

Qt没有为您想要的内容提供内置解决方案。您应该重新实现QGraphicsScene::mouseMoveEvent并检查哪个点(如果有)悬停(具有一定的余量),即确定哪个点在当前鼠标位置的某个距离内(QGraphicsSceneMouseEvent::pos)。

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

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

  • 如果当前鼠标悬停点P,则下次您只能验证它是否仍然存在这一点。

  • 如果当前没有任何点悬停,距离位置P最近的点(您计算最近点的最后一个鼠标位置)距离为d,那么您不应该检查是否发生悬停,如果:norm(P - QGraphicsSceneMouseEvent::pos()) < d - hoverThreshold