Qt鼠标移动事件未被事件过滤器捕获

时间:2011-06-22 12:18:54

标签: qt events qevent

我似乎无法在eventFilter中捕获QEvent :: MouseMove类型的事件。

这是我的事件过滤器:

bool
MapWidget_c::eventFilter( QObject *obj, QEvent *ev )
{
   if( obj == graphicsGeoMap_mp ||
       obj == graphicsScene_mp ||
       obj == graphicsView_mp )
   {
      if( ev->type() == QEvent::MouseMove )
      {
         QMouseEvent *mouseEvent = static_cast< QMouseEvent* >( ev );

         mouseMoveEvent( mouseEvent );

         return true;
      }
      else
      {
         return false;
      }
   }
   else
   {
      // pass the event on to the parent class
      return QWidget::eventFilter( obj, ev );
   }
}

我安装了这样的过滤器:

graphicsGeoMap_mp->installEventFilter( this ); //QGraphicsGeoMap
graphicsScene_mp->installEventFilter( this ); //QGraphicsScene
graphicsView_mp->installEventFilter( this ); //QGraphicsScene

事件过滤器似乎捕获mousePress和mouseRelease事件就好了,但不是mouseMove。

可能是什么问题?

2 个答案:

答案 0 :(得分:5)

事实证明我正在寻找错误的mouseMove事件。

我应该抓住QEvent::GraphicsSceneMouseMove个事件而不是QEvent::MouseMove个事件。

答案 1 :(得分:3)

通常不启用鼠标移动事件。你需要在你的wigdet上启用鼠标跟踪(通过setMouseTracking)来获取它们。

来自QMouseEvent

  

只有在按下鼠标按钮时才会发生鼠标移动事件,除非使用QWidget :: setMouseTracking()启用鼠标跟踪。