开发者

Qt mouse move events not caught by an event filter

开发者 https://www.devze.com 2023-03-14 12:02 出处:网络
I can\'t seem to catch QEvent::MouseMove typed events in my eventFilter. Here\'s my event filter: bool MapWidget_c::eventFilter( QObject *obj, QEvent *ev )

I can't seem to catch QEvent::MouseMove typed events in my eventFilter.

Here's my event filter:

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 t开发者_StackOverflow社区he parent class
      return QWidget::eventFilter( obj, ev );
   }
}

I install the filters like this:

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

The event filter seems to catch mousePress and mouseRelease events just fine, but not mouseMove.

What could be the problem?


It turns out that I was looking for wrong kind of mouseMove events.

I should've been catching QEvent::GraphicsSceneMouseMove events instead of QEvent::MouseMove events.


Mouse move events are not generally enabled. You need to enable mouse tracking (via setMouseTracking) on your wigdet(s) to get them.

From QMouseEvent:

Mouse move events will occur only when a mouse button is pressed down, unless mouse tracking has been enabled with QWidget::setMouseTracking().

0

精彩评论

暂无评论...
验证码 换一张
取 消