diff options
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r-- | src/widgets/widgets/qpushbutton.cpp | 21 | ||||
-rw-r--r-- | src/widgets/widgets/qpushbutton.h | 1 | ||||
-rw-r--r-- | src/widgets/widgets/qpushbutton_p.h | 5 |
3 files changed, 26 insertions, 1 deletions
diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp index 4faa8c7f67..3645b5e03d 100644 --- a/src/widgets/widgets/qpushbutton.cpp +++ b/src/widgets/widgets/qpushbutton.cpp @@ -330,6 +330,8 @@ void QPushButton::initStyleOption(QStyleOptionButton *option) const option->state |= QStyle::State_On; if (!d->flat && !d->down) option->state |= QStyle::State_Raised; + if (underMouse()) + option->state.setFlag(QStyle::State_MouseOver, d->hovering); option->text = d->text; option->icon = d->icon; option->iconSize = iconSize(); @@ -509,6 +511,25 @@ void QPushButton::focusOutEvent(QFocusEvent *e) /*! \reimp */ +void QPushButton::mouseMoveEvent(QMouseEvent *e) +{ + Q_D(QPushButton); + + if (testAttribute(Qt::WA_Hover)) { + bool hit = false; + if (underMouse()) + hit = hitButton(e->position().toPoint()); + + if (hit != d->hovering) { + update(rect()); + d->hovering = hit; + } + } +} + +/*! + \reimp +*/ bool QPushButton::hitButton(const QPoint &pos) const { QStyleOptionButton option; diff --git a/src/widgets/widgets/qpushbutton.h b/src/widgets/widgets/qpushbutton.h index 5452f4227b..eeaa50bb4c 100644 --- a/src/widgets/widgets/qpushbutton.h +++ b/src/widgets/widgets/qpushbutton.h @@ -93,6 +93,7 @@ protected: void keyPressEvent(QKeyEvent *) override; void focusInEvent(QFocusEvent *) override; void focusOutEvent(QFocusEvent *) override; + void mouseMoveEvent(QMouseEvent *) override; virtual void initStyleOption(QStyleOptionButton *option) const; bool hitButton(const QPoint &pos) const override; QPushButton(QPushButtonPrivate &dd, QWidget* parent = nullptr); diff --git a/src/widgets/widgets/qpushbutton_p.h b/src/widgets/widgets/qpushbutton_p.h index a180b27e33..e28a6d71df 100644 --- a/src/widgets/widgets/qpushbutton_p.h +++ b/src/widgets/widgets/qpushbutton_p.h @@ -69,7 +69,9 @@ public: QPushButtonPrivate() : QAbstractButtonPrivate(QSizePolicy::PushButton), autoDefault(Auto), - defaultButton(false), flat(false), menuOpen(false), lastAutoDefault(false) {} + defaultButton(false), flat(false), menuOpen(false), hovering(false), + lastAutoDefault(false) + {} inline void init() { resetLayoutItemMargins(); } static QPushButtonPrivate* get(QPushButton *b) { return b->d_func(); } @@ -89,6 +91,7 @@ public: uint defaultButton : 1; uint flat : 1; uint menuOpen : 1; + uint hovering : 1; mutable uint lastAutoDefault : 1; }; |