2011-06-22 146 views
4

我似乎无法在我的eventFilter中捕获QEvent :: MouseMove类型的事件。Qt鼠标移动事件没有被事件过滤器捕获

这里是我的事件过滤器:

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。

可能是什么问题?

回答

5

事实证明,我正在寻找错误类型的mouseMove事件。

我应该抓住QEvent::GraphicsSceneMouseMove事件而不是QEvent::MouseMove事件。

3

通常不启用鼠标移动事件。你需要在你的假发上启用鼠标跟踪(通过setMouseTracking)来获取它们。

QMouseEvent:当鼠标按钮被按下时,除非鼠标跟踪已启用QWidget的:: setMouseTracking只会发生

鼠标移动事件()。