QGraphicsItem - 跟随鼠标光标

4
我遇到了如何处理这个问题的困境。我在场景中有一个QGraphicsItem,并将悬停事件从场景传递给该子项。当移动事件发生时(我只使用鼠标跟踪的mouseMoveEvent),我希望另一个QGraphicsItem跟随光标移动。
我不需要任何碰撞检测、拖放等功能,只需要一个跟随光标移动的物品。我能想到的两种方法是:
1. 当鼠标移动时,在鼠标位置绘制一个新的QGraphicsItem。我需要清除场景,重新绘制所有内容,并在上方绘制新的位置。 2. 以某种方式使用动画框架,每当鼠标移动时,就将QGraphicsItem动画移动到新的鼠标位置,时间为1毫秒。
我可能要么过于考虑这个问题,要么不知道其他方法来解决它... 你有什么建议吗?

仅为澄清一下 - 本质上,我正在将一个QGraphicsItem制作成工具提示,该工具提示在悬停在另一个QGraphicsItem上时触发(并跟随光标移动)。 - dajaffe
1个回答

4
我是这样做的:
  1. 创建一个名为“cursor”的GraphicsItem,它将随着鼠标光标移动,并在某个地方存储它的指针(例如,在场景子类中。我有一个工具集,所以对我来说它在其中一个工具中)
  2. 设置其Z值(QGraphicsItem :: setZValue),使光标在场景中绘制时位于所有其他项之上
  3. 跟踪QGraphicsScene :: mouseMoveEvent事件,将这些事件转发到指向“cursor”的指针,并更新项的位置
就是这样。 我猜这对应于你的解决方案1,除了你不必清除场景,因为有z-value功能。

啊..太好了。让我试一试。 - dajaffe
所以我尝试了这个,但奇怪的是它只会在特定区域绘制。就像从0,0到30多个、20多个,它不会绘制。然后在那个区域之后,它会绘制。但是一旦它达到100多个、100多个,超出那个范围的任何东西都不会绘制。但是如果我调整窗口大小,它会绘制到光标注册的最后一个位置。有什么想法吗? - dajaffe
@chrometix 现在看起来像是物品的 boundingRect 和/或场景的矩形问题,这是一个不同的问题。无论更新区域的问题如何,您的初始问题是否已解决? - azf
在某种程度上,是的。在移动时绘制物品也会导致物品的残留部分如果光标移动得太快就会保持涂漆状态。我可能会考虑另一种方法来解决这个问题...也许只需回退到静态工具提示,我还需要再做些调整。感谢您的指导,非常感激。 - dajaffe
仅供参考 - 我正在采取完全不同的方向。将QGraphicsItem保存为QImage,并构建一个QPixMap,供光标使用。 - dajaffe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接