4

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はキャッチしていません。

何が問題なのですか?

4

2 に答える 2

5

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

QEvent::GraphicsSceneMouseMoveイベントではなくイベントをキャッチするべきだったQEvent::MouseMove

于 2011-06-22T12:30:18.207 に答える
3

通常、マウス移動イベントは有効になっていません。setMouseTrackingそれらを取得するには、ウィグデットで(を介して)マウス追跡を有効にする必要があり ます。

QMouseEventから:

QWidget :: setMouseTracking()でマウス追跡が有効になっていない限り、マウス移動イベントはマウスボタンが押されたときにのみ発生します。

于 2011-06-22T12:23:29.863 に答える