2017-07-10 5 views
0

私は自分のアイテムの特定の領域にマウスカーソルを合わせると、アイテムを再描画するホバー機能を実装しようとしています。マウスボタンを押さずにmouseMoveEventを受け取っていません

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

ただし、このクラスを使用すると、私は私の項目の上にカーソルを移動すると、端末上の任意の「mouseMoveEvent()」出力を受信いけません。任意のマウスボタンを押したままで動作します。

これを実現するには、ユーザーがマウスボタンを押さないでください。

答えて

1

私自身で解決できるかどうか、問題は間違ったイベントを聞いていたことです。正しいイベントはhoverMoveEvent()でした。

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

次のクラスを使用して、私は正しい出力を得ました

関連する問題