4

我被困在如何解决这个问题上。我在场景中有一个 QGraphicsItem,我正在将一个悬停事件从场景传递给这个孩子。当移动事件发生时(我只是使用 mouseMoveEvent 并启用鼠标跟踪),我希望另一个 QGraphicsItem 跟随光标。

我不需要任何碰撞检测、拖放等。只是一个跟随光标的项目。我能想到的唯一两种方法是......

  1. 在鼠标移动的同时,在鼠标位置绘制一个新的 QGraphicsItem。我需要清除场景,重新绘制所有内容,然后在顶部绘制新位置。
  2. 不知何故使用动画框架,每当鼠标移动时,动画 QGraphicsItem 以在 1 毫秒内移动到新的鼠标位置。

我可能要么想多了,要么不知道另一种方法来做到这一点......有什么建议吗?

4

1 回答 1

4

我是这样做的

  1. 创建cursor将使用鼠标光标移动的 GraphicsItem,并将其指针存储在某处(例如在场景子类中。我有一个工具集,所以对我来说它在这些工具之一中)
  2. 设置其 Z 值 ( QGraphicsItem::setZValue) 以便将光标绘制在场景中的所有其他项目之上
  3. 跟踪QGraphicsScene::mouseMoveEvent事件,将这些事件向下转发到cursor指针,并更新项目的位置

就是这样。我想它对应于您的解决方案 1,但由于 z 值功能,您不必清除场景。

于 2012-03-22T08:14:12.660 回答