diff --git a/src/widgets/widgets/qscrollbar.cpp b/src/widgets/widgets/qscrollbar.cpp index efb17afedb..9ef56b7f95 100644 --- a/src/widgets/widgets/qscrollbar.cpp +++ b/src/widgets/widgets/qscrollbar.cpp @@ -476,8 +476,18 @@ bool QScrollBar::event(QEvent *event) if (const QHoverEvent *he = static_cast(event)) d_func()->updateHoverControl(he->pos()); break; + default: + break; + } + return QAbstractSlider::event(event); +} + +/*! + \reimp +*/ #ifndef QT_NO_WHEELEVENT - case QEvent::Wheel: { +void QScrollBar::wheelEvent(QWheelEvent *event) +{ event->ignore(); // override wheel event without adding virtual function override QWheelEvent *ev = static_cast(event); @@ -492,14 +502,8 @@ bool QScrollBar::event(QEvent *event) Q_D(QScrollBar); if (d->scrollByDelta(ev->orientation(), ev->modifiers(), delta)) event->accept(); - return true; - } -#endif - default: - break; - } - return QAbstractSlider::event(event); } +#endif /*! \reimp diff --git a/src/widgets/widgets/qscrollbar.h b/src/widgets/widgets/qscrollbar.h index 95943f2676..48863616ff 100644 --- a/src/widgets/widgets/qscrollbar.h +++ b/src/widgets/widgets/qscrollbar.h @@ -67,6 +67,9 @@ public: bool event(QEvent *event); protected: +#ifndef QT_NO_WHEELEVENT + void wheelEvent(QWheelEvent *); +#endif void paintEvent(QPaintEvent *); void mousePressEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); diff --git a/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp b/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp index 88c498cf07..4940372db9 100644 --- a/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp +++ b/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp @@ -56,6 +56,9 @@ public slots: private slots: void scrollSingleStep(); void task_209492(); +#ifndef QT_NO_WHEELEVENT + void QTBUG_27308(); +#endif private: QScrollBar *testWidget; @@ -143,5 +146,21 @@ void tst_QScrollBar::task_209492() QCOMPARE(spy.count(), 1); } +#ifndef QT_NO_WHEELEVENT +#define WHEEL_DELTA 120 // copied from tst_QAbstractSlider / tst_QComboBox +void tst_QScrollBar::QTBUG_27308() +{ + // https://bugreports.qt-project.org/browse/QTBUG-27308 + // Check that a disabled scrollbar doesn't react on wheel events anymore + + testWidget->setValue(testWidget->minimum()); + testWidget->setEnabled(false); + QWheelEvent event(testWidget->rect().center(), + -WHEEL_DELTA, Qt::NoButton, Qt::NoModifier, testWidget->orientation()); + qApp->sendEvent(testWidget, &event); + QCOMPARE(testWidget->value(), testWidget->minimum()); +} +#endif + QTEST_MAIN(tst_QScrollBar) #include "tst_qscrollbar.moc"