События перемещения мыши Qt, не захваченные фильтром событий - PullRequest
4 голосов
/ 22 июня 2011

Кажется, я не могу поймать события, введенные QEvent :: MouseMove, в моем eventFilter.

Вот мой фильтр событий:

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 ]

5 голосов
/ 22 июня 2011

Оказывается, я искал неправильный вид событий mouseMove.

Я должен был перехватывать QEvent::GraphicsSceneMouseMove события вместо QEvent::MouseMove событий.

3 голосов
/ 22 июня 2011

События перемещения мыши обычно не включены.Вам нужно включить отслеживание мыши (через setMouseTracking) на ваших вигдетах, чтобы получить их.

From QMouseEvent :

События перемещения мыши будут происходить только при нажатии кнопки мыши, если только отслеживание мыши не было включено с помощью QWidget :: setMouseTracking ().

...