我需要在主窗口小部件中获取移动事件,但是QGraphicsView会捕获该事件,因此无法在主窗口小部件中获取它。有什么办法可以关闭它,所以我可以捕捉事件,就像捕捉小部件中的任何mousemoveevent一样。注意:问题不是我禁用了鼠标跟踪。我知道这一点,并且在graphicsview之外捕获此事件正在工作

最佳答案

以下是数十种可能的解决方案:

忽视

从文档:


  如果鼠标事件未由您处理,则应调用ignore()
  小部件。鼠标事件沿父窗口小部件链向上传播,直到
  小部件使用accept()接受它,或者事件过滤器使用它。


// view.cpp

mouseMoveEvent(QMouseEvent *event){
event.ignore(); // propagated to parent
}


双人赛事

发生移动事件时,尝试从QGraphicsView发出带有鼠标位置的信号,并将其捕获到主窗口小部件中。

// view.cpp

mouseMoveEvent (QMouseEvent *event){
    emit mouseMoveSignal(event.pos());
    }


// mainwindow.cpp

mainWindow::mainWindow (QWidget * parent = 0){
    connect(view, SIGNAL(mouseMoveSignal(QPointF)), this, SLOT(mouseMoveSlot(QPointF)));
}

09-06 11:24