2011-06-22 3 views
4

Je n'arrive pas à détecter les événements tapés QEvent :: MouseMove dans mon eventFilter.Les événements de déplacement de souris Qt ne sont pas interceptés par un filtre d'événement

Voici mon filtre d'événement:

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

installer les filtres comme ceci:

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

Le filtre d'événements semble attraper des événements mousePress et mouseRelease très bien, mais pas mouseMove.

Quel pourrait être le problème?

Répondre

5

Il s'avère que je cherchais un mauvais type d'événements mouseMove. Je devrais attraper QEvent::GraphicsSceneMouseMove événements au lieu de QEvent::MouseMove événements.

3

Les événements de déplacement de la souris ne sont généralement pas activés. Vous devez activer le suivi de la souris (via setMouseTracking) sur votre wigdet (s) pour les obtenir.

De QMouseEvent:

souris événements de déplacement se produisent uniquement lorsqu'un bouton de la souris est pressée vers le bas, à moins que le suivi de la souris a été activée avec QWidget :: setMouseTracking().

Questions connexes