Add an option to scroll the QComboBox on macOS with the mouse wheel
Since there may be some applications that want to make their comboboxes scrollable or not with the mouse wheel then a style hint is added to make this toggable. It defaults to true for all platforms except macOS to keep it in line with existing behavior. [ChangeLog][QtWidgets][QStyle] Added SH_ComboBox_AllowWheelScrolling as a style hint to enable/disable the use of the mouse wheel in a QComboBox. This defaults to true in all styles except the macOS one so there is no change in existing behavior. Task-number: QTBUG-53094 Change-Id: I6eb61e1990bfc79e3b3ea82d7b91ee39096fa077 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io> Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io> Reviewed-by: Andy Nichols <andy.nichols@qt.io>bb10
parent
bef0db36ac
commit
5e9e4ccdc3
|
|
@ -2963,6 +2963,9 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w
|
|||
// min/max/close buttons on windows don't show tool tips
|
||||
ret = false;
|
||||
break;
|
||||
case SH_ComboBox_AllowWheelScrolling:
|
||||
ret = false;
|
||||
break;
|
||||
default:
|
||||
ret = QCommonStyle::styleHint(sh, opt, w, hret);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -5290,6 +5290,9 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget
|
|||
case SH_Widget_Animation_Duration:
|
||||
ret = styleHint(SH_Widget_Animate, opt, widget, hret) ? 200 : 0;
|
||||
break;
|
||||
case SH_ComboBox_AllowWheelScrolling:
|
||||
ret = true;
|
||||
break;
|
||||
default:
|
||||
ret = 0;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1994,6 +1994,11 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment,
|
|||
A value equal to zero means that the animations will be disabled.
|
||||
This enum value has been introduced in Qt 5.10.
|
||||
|
||||
\value SH_ComboBox_AllowWheelScrolling
|
||||
Determines if the mouse wheel can be used to scroll inside a QComboBox.
|
||||
This is on by default in all styles except the Mac style.
|
||||
This enum value has been introduced in Qt 5.10.
|
||||
|
||||
\sa styleHint()
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -739,6 +739,7 @@ public:
|
|||
SH_ItemView_ScrollMode,
|
||||
SH_TitleBar_ShowToolTipsOnButtons,
|
||||
SH_Widget_Animation_Duration,
|
||||
SH_ComboBox_AllowWheelScrolling,
|
||||
// Add new style hint values here
|
||||
|
||||
SH_CustomBase = 0xf0000000
|
||||
|
|
|
|||
|
|
@ -3350,11 +3350,11 @@ void QComboBox::keyReleaseEvent(QKeyEvent *e)
|
|||
#if QT_CONFIG(wheelevent)
|
||||
void QComboBox::wheelEvent(QWheelEvent *e)
|
||||
{
|
||||
#ifdef Q_OS_DARWIN
|
||||
Q_UNUSED(e);
|
||||
#else
|
||||
Q_D(QComboBox);
|
||||
if (!d->viewContainer()->isVisible()) {
|
||||
QStyleOptionComboBox opt;
|
||||
initStyleOption(&opt);
|
||||
if (style()->styleHint(QStyle::SH_ComboBox_AllowWheelScrolling, &opt, this) &&
|
||||
!d->viewContainer()->isVisible()) {
|
||||
const int rowCount = count();
|
||||
int newIndex = currentIndex();
|
||||
|
||||
|
|
@ -3374,7 +3374,6 @@ void QComboBox::wheelEvent(QWheelEvent *e)
|
|||
}
|
||||
e->accept();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -2052,13 +2052,13 @@ void tst_QComboBox::mouseWheel_data()
|
|||
QTest::newRow("upper locked") << disabled << start << wheel << expected;
|
||||
|
||||
wheel = -1;
|
||||
#ifdef Q_OS_DARWIN
|
||||
const bool allowsWheelScroll = QApplication::style()->styleHint(QStyle::SH_ComboBox_AllowWheelScrolling);
|
||||
// on OS X & iOS mouse wheel shall have no effect on combo box
|
||||
expected = start;
|
||||
#else
|
||||
// on other OSes we should jump to next enabled item (no. 5)
|
||||
expected = 5;
|
||||
#endif
|
||||
if (!allowsWheelScroll)
|
||||
expected = start;
|
||||
else // on other OSes we should jump to next enabled item (no. 5)
|
||||
expected = 5;
|
||||
|
||||
QTest::newRow("jump over") << disabled << start << wheel << expected;
|
||||
|
||||
disabled.clear();
|
||||
|
|
|
|||
Loading…
Reference in New Issue