事件过滤器未捕获 Qt 鼠标移动事件
Posted
技术标签:
【中文标题】事件过滤器未捕获 Qt 鼠标移动事件【英文标题】:Qt mouse move events not caught by an event filter 【发布时间】:2011-06-22 12:18:54 【问题描述】:我似乎无法在我的 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。
可能是什么问题?
【问题讨论】:
【参考方案1】:原来我在寻找错误的 mouseMove 事件。
我应该一直在捕捉 QEvent::GraphicsSceneMouseMove
事件而不是 QEvent::MouseMove
事件。
【讨论】:
【参考方案2】:鼠标移动事件通常不启用。您需要在您的 wigdet(s) 上启用鼠标跟踪(通过 setMouseTracking
)才能获取它们。
来自QMouseEvent:
只有在按下鼠标按钮时才会发生鼠标移动事件,除非使用 QWidget::setMouseTracking() 启用了鼠标跟踪。
【讨论】:
以上是关于事件过滤器未捕获 Qt 鼠标移动事件的主要内容,如果未能解决你的问题,请参考以下文章