在QGraphicsScene类中跟踪鼠标移动

cut*_*CAT 19 qt qgraphicsview qobject qgraphicsscene

我将QGraphicsScene子类化,并添加方法mouseMoveEvent来处理鼠标移动事件.我在GraphicsView上创建了一个标尺,并使用标尺跟踪鼠标移动.在QGraphicsScene :: mousemoveEvent中,我将expliitely调用标尺小部件的mouseMoveEvent.目的是让标尺知道当前的鼠标位置.

现在,当我移动鼠标时,似乎没有调用QGraphicsScene :: mousemoveEvent.但是,如果我按住鼠标左键并按住按钮移动它,我可以使它工作.这不是我想看到的; 每当我将鼠标放在视图上并移动鼠标时,我都会调用此方法.

有没有解决方法?

Mat*_*Mat 12

QGraphicsView文档中所述,视图负责将鼠标和键盘事件转换为场景事件并将其传播到场景:

您可以使用鼠标和键盘与场景中的项目进行交互.QGraphicsView将鼠标和键事件转换为场景事件(继承QGraphicsSceneEvent的事件),并将它们转发到可视化场景.

由于鼠标移动事件仅在默认情况下按下按钮时发生,因此您需要setMouseTracking(true)在视图上首先生成移动事件,以便将它们转发到场景中.
或者,如果您不需要转换为场景坐标,则可以mouseMoveEvent直接在视图中重新实现,而不是在场景中重新实现.但在这种情况下,请确保QGraphicsView::mouseMoveEvent在实现中调用基类,以便为场景中的项正确生成悬停事件.