2011-06-22 33 views
4

QEvent :: MouseMove型付きイベントを私のeventFilterで捕まえられないようです。 mouseMoveイベントではないQtマウス移動イベントがイベントフィルタによってキャッチされない

graphicsGeoMap_mp->installEventFilter(this); //QGraphicsGeoMap 
graphicsScene_mp->installEventFilter(this); //QGraphicsScene 
graphicsView_mp->installEventFilter(this); //QGraphicsScene 

イベントフィルタはうまくmousePressとmouseReleaseイベントをキャッチするようだが、私はこのようなフィルタをインストール

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); 
    } 
} 

は、ここに私のイベントフィルタです。

何が問題なのですか?

答えて

5

間違った種類のmouseMoveイベントを探していたことが判明しました。

私はQEvent::MouseMoveイベントの代わりにQEvent::GraphicsSceneMouseMoveイベントをキャッチしていたはずです。

3

マウス移動イベントは、通常有効になっていません。 wigdet上でマウストラッキング(setMouseTracking経由)を有効にする必要があります。 QMouseEventから

マウス移動イベントは、マウストラッキングはQWidgetので有効になっていない限り、マウスボタンが押下された場合にのみ発生します:: setMouseTracking()。