From 800d7138a3db8588172c3557cf4455bf1a3414af Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Wed, 30 Oct 2024 14:38:32 +0100 Subject: [PATCH] QHeaderView: add test for not overwriting resized sections If we change, reset or update the default section size, e.g. in response to style changes or programmatically, then we don't want to override explicitly specified column widths in e.g. a tree view. Add a test that verifies that we don't overwrite. Task-number: QTBUG-116013 Task-number: QTBUG-122109 Task-number: QTBUG-123154 Change-Id: I3d9a6ac685da39a59436b91f56e86b0f705e645c Reviewed-by: Axel Spoerl (cherry picked from commit 3ca0288aa927108de4c57119d9767998021a6089) Reviewed-by: Volker Hilsheimer --- .../itemviews/qheaderview/tst_qheaderview.cpp | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp index 2a19a4a9e13..012fb17ee95 100644 --- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp +++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp @@ -229,6 +229,7 @@ private slots: void testModelMovingColumns(); void testModelMovingRows(); + void setDefaultSectionSizeRespectsColumnWidth(); protected: void setupTestData(bool use_reset_model = false); void additionalInit(); @@ -3685,5 +3686,32 @@ void tst_QHeaderView::testModelMovingRows() QVERIFY(!hv.isSectionHidden(3)); } +void tst_QHeaderView::setDefaultSectionSizeRespectsColumnWidth() +{ + QTreeWidget tree; + tree.setHeaderItem(new QTreeWidgetItem({"Col 0", "Col 1", "Col 2"})); + tree.header()->setStretchLastSection(false); + + int columnWidths[3] = {}; + for (int c = tree.columnCount() - 1; c >= 0; --c) { + columnWidths[c] = tree.columnWidth(c) * 2; + tree.setColumnWidth(c, columnWidths[c]); + } + tree.show(); + QVERIFY(QTest::qWaitForWindowExposed(&tree)); + + for (int c = 0; c < tree.columnCount(); ++c) + QTRY_COMPARE(tree.columnWidth(c), columnWidths[c]); + + // trigger a style change event + tree.setStyleSheet("QTreeView { qproperty-headerHidden: true }"); + QTRY_COMPARE(tree.isHeaderHidden(), true); + tree.setStyleSheet("QTreeView { qproperty-headerHidden: false }"); + QTRY_COMPARE(tree.isHeaderHidden(), false); + + for (int c = 0; c < tree.columnCount(); ++c) + QTRY_COMPARE(tree.columnWidth(c), columnWidths[c]); +} + QTEST_MAIN(tst_QHeaderView) #include "tst_qheaderview.moc"