C++ Qt4:操作QGraphicsItem时将鼠标光标锁定到位

C++ Qt4:操作QGraphicsItem时将鼠标光标锁定到位,c++,qt4,mouse,cursor,qgraphicsview,C++,Qt4,Mouse,Cursor,Qgraphicsview,我正在用Qt4编写一个小的GUI实用程序,它使用qgraphicscene。其中一个项目在水平面上移动鼠标时跟踪鼠标,按住修改器键可以更改项目的旋转。旋转项目时,我希望鼠标光标变为曲线箭头(或其他东西)并在视觉上锁定到位,因此移动它会影响项目,但不会影响鼠标光标本身 释放修改器会将(以前不可见的)光标放回其原始点:这是为了防止项目在之后“跳转”到鼠标的新水平位置,这是我的主要问题 我真的不知道如何在Qt4中实现这一点,因为它不涉及做一些可怕的事情,比如: 按下修改器时,存储当前鼠标位置 将光标

我正在用Qt4编写一个小的GUI实用程序,它使用qgraphicscene。其中一个项目在水平面上移动鼠标时跟踪鼠标,按住修改器键可以更改项目的旋转。旋转项目时,我希望鼠标光标变为曲线箭头(或其他东西)并在视觉上锁定到位,因此移动它会影响项目,但不会影响鼠标光标本身

释放修改器会将(以前不可见的)光标放回其原始点:这是为了防止项目在之后“跳转”到鼠标的新水平位置,这是我的主要问题

我真的不知道如何在Qt4中实现这一点,因为它不涉及做一些可怕的事情,比如:

  • 按下修改器时,存储当前鼠标位置
  • 将光标切换为空位图
  • 以某种方式在原始位置绘制一个假光标(!?)
  • 删除假光标,并在完成后切换回鼠标位置
如果有人能想出更好的方法来实现这一点,请万分感激。首先,我并不是太执着于固定鼠标光标的想法,但这是我唯一能想到的解决这个问题的方法,用一个控制方案,否则效果会很好


编辑:我尝试了上面概述的垃圾方案,但在以编程方式移动鼠标位置时遇到了问题。我还在想我以前在哪里用过类似的系统:基本上它是一个旋钮。您单击它并上下移动鼠标,从而旋转了旋钮。当您松开鼠标按钮时,指针回到了最初放在旋钮上的位置。

在进行此操作时,使用事件过滤器捕获QMouseEvents如何

在进行此操作时,使用事件筛选器捕获QMouseEvents如何

非常感谢你的建议。我查了一下,事件过滤器看起来是最好的方法(对于许多其他东西,我以前从未使用过它们。)我确实尝试过实现我概述的(可怕的)方法,但在尝试操纵实际鼠标指针(相对于光标)位置时遇到了奇怪的问题,最后,我放弃了它,转而采用了一种非常不同的方案,这种方案有着类似的糟糕代码味道。顺便说一句,我肯定我在Windows上看到了固定光标的应用,例如,移动软件合成器上的虚拟旋钮等等,所以我仍然有兴趣知道你是如何做到这一点的。非常感谢你的有用建议。我查了一下,事件过滤器看起来是最好的方法(对于许多其他东西,我以前从未使用过它们。)我确实尝试过实现我概述的(可怕的)方法,但在尝试操纵实际鼠标指针(相对于光标)位置时遇到了奇怪的问题,最后,我放弃了它,转而采用了一种非常不同的方案,这种方案有着类似的糟糕代码味道。顺便说一句,我肯定我已经看到了Windows上的固定光标功能,例如,移动软件合成器上的虚拟旋钮等等,所以我仍然有兴趣知道您是如何做到这一点的。