События перемещения мыши Qt, не захваченные фильтром событий
Я не могу поймать события 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 ответа
Решение
Оказывается, я искал неправильные события mouseMove.
Я должен был поймать QEvent::GraphicsSceneMouseMove
события вместо QEvent::MouseMove
События.
События перемещения мыши обычно не включены. Вам необходимо включить отслеживание мыши (через setMouseTracking
) на ваш wigdet(s), чтобы получить их.
Из QMouseEvent:
События перемещения мыши будут происходить только при нажатии кнопки мыши, если только отслеживание мыши не было включено с помощью QWidget::setMouseTracking().