diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index 9ce09dbacc0..614242118ef 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -1518,6 +1518,7 @@ void QHeaderView::setDefaultSectionSize(int size) Q_D(QHeaderView); if (size < 0 || size > maxSizeSection) return; + d->oldDefaultSectionSize = d->defaultSectionSize; d->setDefaultSectionSize(size); } @@ -1525,7 +1526,9 @@ void QHeaderView::resetDefaultSectionSize() { Q_D(QHeaderView); if (d->customDefaultSectionSize) { + d->oldDefaultSectionSize = d->defaultSectionSize; d->updateDefaultSectionSizeFromStyle(); + d->setDefaultSectionSize(d->defaultSectionSize); d->customDefaultSectionSize = false; } } @@ -2376,8 +2379,12 @@ bool QHeaderView::event(QEvent *e) } break; } case QEvent::StyleChange: - if (!d->customDefaultSectionSize) + if (!d->customDefaultSectionSize) { + d->oldDefaultSectionSize = d->defaultSectionSize; d->updateDefaultSectionSizeFromStyle(); + d->setDefaultSectionSize(d->defaultSectionSize); + d->customDefaultSectionSize = false; + } break; default: break; @@ -3850,7 +3857,11 @@ void QHeaderViewPrivate::setDefaultSectionSize(int size) for (int i = 0; i < sectionItems.size(); ++i) { QHeaderViewPrivate::SectionItem §ion = sectionItems[i]; if (hiddenSectionSize.isEmpty() || !isVisualIndexHidden(i)) { // resize on not hidden. - const int newSize = size; + // Resize to the new default if the current size is the old default, + // or 0. Otherwise don't change. + const int newSize = (section.size == oldDefaultSectionSize || !section.size) + ? size + : section.size; if (newSize != section.size) { length += newSize - section.size; //the whole length is changed const int oldSectionSize = section.sectionSize(); diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h index 8b214e1d03e..e0c601105ee 100644 --- a/src/widgets/itemviews/qheaderview_p.h +++ b/src/widgets/itemviews/qheaderview_p.h @@ -272,6 +272,7 @@ public: int stretchSections; int contentsSections; int defaultSectionSize; + int oldDefaultSectionSize = -1; int minimumSectionSize; int maximumSectionSize; int lastSectionSize; diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp index 012fb17ee95..5dd6d35b4c5 100644 --- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp +++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp @@ -3289,6 +3289,10 @@ void tst_QHeaderView::resizeToContentTest() QCOMPARE(hh->sectionSize(3), 200); hh->setMaximumSectionSize(-1); + // give all sections a zero-size, so that setDefaultSectionSize resets their size + for (int u = 0; u < view->count(); ++u) + view->resizeSection(u, 0); + view->setDefaultSectionSize(25); // To make sure our precalced data are correct. We do not know font height etc. const int precalced_results[] = { -1523279360, -1523279360, -1347156568, 1, 1719705216, 1719705216, 12500 }; diff --git a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp index 681be2491dc..6848b28f494 100644 --- a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp +++ b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp @@ -4950,7 +4950,6 @@ void tst_QTableView::resetDefaultSectionSize() view.verticalHeader()->resetDefaultSectionSize(); view.show(); QVERIFY(QTest::qWaitForWindowExposed(&view)); - QEXPECT_FAIL("", "Reverted fix for QTBUG-116013 due to QTBUG-122109", Continue); QCOMPARE(view.verticalHeader()->logicalIndexAt(9, 45), 1); }