2017-07-10 5 views
0

Ich versuche eine Hover-Funktion zu implementieren, wo ich das Element neu streiche, wenn ich bestimmte Bereiche auf meinem Objekt schwebe.MausMoveEvent nicht erhalten, ohne die Maustaste gedrückt zu halten

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

jedoch unter Verwendung dieser Klasse I erhalten nicht irgendwelche „mousemove()“ gibt an Klemme, wenn ich den Cursor über mein Element bewegen. Es funktioniert nur, wenn Sie eine Maustaste gedrückt halten.

Wie kann ich das erreichen, ohne den Benutzer dazu zu zwingen, eine Maustaste zu halten?

Antwort

1

Konnte es auf eigene Faust lösen, das Problem war, dass ich auf die falschen Ereignisse hörte. Das korrekte Ereignis wäre hoverMoveEvent() gewesen.

die folgende Klasse verwenden, bekam ich die richtige Ausgabe:

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(); 
    } 
}; 
Verwandte Themen