4

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 the 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?

Gerstmann
  • 5,368
  • 6
  • 37
  • 57

2 Answers2

5

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.

gd1
  • 11,300
  • 7
  • 49
  • 88
Gerstmann
  • 5,368
  • 6
  • 37
  • 57
3

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().

Mat
  • 202,337
  • 40
  • 393
  • 406