我似乎无法在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。
可能是什么问题?
答案 0 :(得分:5)
事实证明我正在寻找错误的mouseMove事件。
我应该抓住QEvent::GraphicsSceneMouseMove
个事件而不是QEvent::MouseMove
个事件。
答案 1 :(得分:3)
通常不启用鼠标移动事件。你需要在你的wigdet上启用鼠标跟踪(通过setMouseTracking
)来获取它们。
来自QMouseEvent:
只有在按下鼠标按钮时才会发生鼠标移动事件,除非使用QWidget :: setMouseTracking()启用鼠标跟踪。