2017-07-10 2 views
0

J'essaie d'implémenter une fonctionnalité de survol lorsque je repeins l'élément lorsque je survole des zones spécifiques de mon objet.Je ne reçois pas mouseMoveEvent sans le bouton de la souris

class TestItem : public QQuickItem 
{ 
    Q_OBJECT 

public: 
    explicit TestItem(QQuickItem *parent = nullptr) : QQuickItem(parent) 
    { 
     setAcceptHoverEvents(true); 
     setAcceptedMouseButtons(Qt::AllButtons); 
    } 

protected: 
    // QQuickItem interface 
    void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE 
    { 
     qDebug() << "mouseMoveEvent()" << event->buttons() << event->x() << event->y(); 
    } 

    void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE 
    { 
     qDebug() << "mousePressEvent()" << event->buttons() << event->x() << event->y(); 
    } 

    void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE 
    { 
     qDebug() << "mouseReleaseEvent()" << event->buttons() << event->x() << event->y(); 
    } 
}; 

Cependant, en utilisant cette classe je ne reçoivent aucune sortie « mouseMoveEvent() » sur la borne lorsque je déplace le curseur sur mon élément. Cela ne fonctionne que lorsque vous maintenez un bouton de la souris.

Comment archiver sans forcer l'utilisateur à appuyer sur un bouton de la souris?

Répondre

1

Pourrait le résoudre par moi-même, le problème était que j'écoutais les mauvais événements. L'événement correct aurait été hoverMoveEvent().

Utilisation de la classe suivante, je suis la sortie correcte:

class TestItem : public QQuickItem 
{ 
    Q_OBJECT 

public: 
    explicit TestItem(QQuickItem *parent = nullptr) : QQuickItem(parent) 
    { 
     setAcceptHoverEvents(true); 
    } 

protected: 
    // QQuickItem interface 
    void hoverEnterEvent(QHoverEvent *event) Q_DECL_OVERRIDE 
    { 
     qDebug() << "hoverEnterEvent()" << event->posF(); 
    } 

    void hoverMoveEvent(QHoverEvent *event) Q_DECL_OVERRIDE 
    { 
     qDebug() << "hoverMoveEvent()" << event->posF(); 
    } 

    void hoverLeaveEvent(QHoverEvent *event) Q_DECL_OVERRIDE 
    { 
     qDebug() << "hoverLeaveEvent()" << event->posF(); 
    } 
};