diff options
Diffstat (limited to 'src/widgets/widgets/qpushbutton.cpp')
-rw-r--r-- | src/widgets/widgets/qpushbutton.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp index 3d075bf92f..c70cfde3d9 100644 --- a/src/widgets/widgets/qpushbutton.cpp +++ b/src/widgets/widgets/qpushbutton.cpp @@ -326,12 +326,16 @@ void QPushButton::initStyleOption(QStyleOptionButton *option) const option->features |= QStyleOptionButton::AutoDefaultButton; if (d->defaultButton) option->features |= QStyleOptionButton::DefaultButton; + if (d->commandLink) + option->features |= QStyleOptionButton::CommandLinkButton; if (d->down || d->menuOpen) option->state |= QStyle::State_Sunken; if (d->checked) option->state |= QStyle::State_On; if (!d->flat && !d->down) option->state |= QStyle::State_Raised; + if (underMouse() && hasMouseTracking()) + option->state.setFlag(QStyle::State_MouseOver, d->hovering); option->text = d->text; option->icon = d->icon; option->iconSize = iconSize(); @@ -581,6 +585,13 @@ void QPushButton::showMenu() d->_q_popupPressed(); } +void QPushButtonPrivate::init() +{ + Q_Q(QPushButton); + q->setAttribute(Qt::WA_MacShowFocusRect); + resetLayoutItemMargins(); +} + void QPushButtonPrivate::_q_popupPressed() { Q_Q(QPushButton); @@ -691,6 +702,18 @@ bool QPushButton::event(QEvent *e) updateGeometry(); } else if (e->type() == QEvent::PolishRequest) { updateGeometry(); + } else if (e->type() == QEvent::MouseMove) { + const QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(e); + if (testAttribute(Qt::WA_Hover)) { + bool hit = false; + if (underMouse()) + hit = hitButton(mouseEvent->pos()); + + if (hit != d->hovering) { + update(rect()); + d->hovering = hit; + } + } } return QAbstractButton::event(e); } |