diff --git a/src/widgets/widgets/qtoolbar.cpp b/src/widgets/widgets/qtoolbar.cpp index 0d386a4378a..b8b462b03f8 100644 --- a/src/widgets/widgets/qtoolbar.cpp +++ b/src/widgets/widgets/qtoolbar.cpp @@ -912,8 +912,13 @@ void QToolBar::changeEvent(QEvent *event) break; case QEvent::StyleChange: d->layout->invalidate(); - if (!d->explicitIconSize) - setIconSize(QSize()); + if (!d->explicitIconSize) { + QStyleOptionToolBar opt; + initStyleOption(&opt); + const int metric = style()->pixelMetric(QStyle::PM_ToolBarIconSize, &opt, this); + setIconSize({metric, metric}); + d->explicitIconSize = false; + } d->layout->updateMarginAndSpacing(); break; case QEvent::LayoutDirectionChange: diff --git a/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp b/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp index 8b8c74b1e7d..6c3f7ccb197 100644 --- a/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp +++ b/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp @@ -62,6 +62,7 @@ private slots: void task197996_visibility(); void extraCpuConsumption(); // QTBUG-54676 + void iconSizeStyleSheet(); }; @@ -1164,5 +1165,45 @@ void tst_QToolBar::extraCpuConsumption() QCOMPARE(eventCounter->hideEventsCount(), uint(1)); } +void tst_QToolBar::iconSizeStyleSheet() +{ + auto resetStyleSheet = qScopeGuard([]{ + qApp->setStyleSheet({}); + }); + + QMainWindow mw; + QToolBar tb1; + QToolBar tb2; + mw.addToolBar(&tb1); + mw.addToolBar(&tb2); + + const QString styleSheet = "QToolBar { icon-size: %1px; }"; + + const int targetIconSize1 = 48; + const int targetIconSize2 = 58; + const int targetIconSize3 = 68; + const int targetIconSize4 = 78; + + // Set iconSize via stylesheet using icon-size property first time + qApp->setStyleSheet(styleSheet.arg(targetIconSize1)); + QTRY_COMPARE(tb1.iconSize(), QSize(targetIconSize1, targetIconSize1)); + QTRY_COMPARE(tb2.iconSize(), QSize(targetIconSize1, targetIconSize1)); + + qApp->setStyleSheet(styleSheet.arg(targetIconSize2)); + QTRY_COMPARE(tb1.iconSize(), QSize(targetIconSize2, targetIconSize2)); + QTRY_COMPARE(tb2.iconSize(), QSize(targetIconSize2, targetIconSize2)); + + // Set tb2's icon size explicitly via setIconSize() + tb2.setIconSize(QSize(targetIconSize3, targetIconSize3)); + QCOMPARE(tb1.iconSize(), QSize(targetIconSize2, targetIconSize2)); + QCOMPARE(tb2.iconSize(), QSize(targetIconSize3, targetIconSize3)); + + // Set iconSize via stylesheet using icon-size property after setting using setIconSize() + qApp->setStyleSheet(styleSheet.arg(targetIconSize4)); + // setIconSize has precedence over iconSize set via stylesheet using icon-size property + QTRY_COMPARE(tb1.iconSize(), QSize(targetIconSize4, targetIconSize4)); + QCOMPARE(tb2.iconSize(), QSize(targetIconSize3, targetIconSize3)); +} + QTEST_MAIN(tst_QToolBar) #include "tst_qtoolbar.moc"