summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2017-05-31 18:54:04 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2017-05-31 18:54:04 +0000
commite3bc01b0e339aa3730c619fb02201aa09468d557 (patch)
treeace583c75770f52f65b9d78c62303693038f672c
parentf33cf18d882ada727da0f378525e55d9421e3b16 (diff)
parent7ee80242de2744790e5c35662c14594981f8586d (diff)
Merge "Merge remote-tracking branch 'origin/5.9.0' into 5.9" into refs/staging/5.9
-rw-r--r--src/gui/configure.json1
-rw-r--r--src/widgets/itemviews/qheaderview.cpp8
-rw-r--r--tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp50
3 files changed, 55 insertions, 4 deletions
diff --git a/src/gui/configure.json b/src/gui/configure.json
index 93098a4b58..a5101817b7 100644
--- a/src/gui/configure.json
+++ b/src/gui/configure.json
@@ -443,7 +443,6 @@
"combined-angle-lib": {
"label": "Combined ANGLE Library",
"autoDetect": false,
- "enable": "features.angle",
"condition": "features.angle",
"output": [ "publicFeature" ]
},
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp
index e0e993ce77..76f80c680e 100644
--- a/src/widgets/itemviews/qheaderview.cpp
+++ b/src/widgets/itemviews/qheaderview.cpp
@@ -3876,9 +3876,11 @@ bool QHeaderViewPrivate::read(QDataStream &in)
const int currentCount = (orient == Qt::Horizontal ? model->columnCount(root) : model->rowCount(root));
if (newSectionItems.count() < currentCount) {
// we have sections not in the saved state, give them default settings
- for (int i = newSectionItems.count(); i < currentCount; ++i) {
- visualIndicesIn.append(i);
- logicalIndicesIn.append(i);
+ if (!visualIndicesIn.isEmpty() && !logicalIndicesIn.isEmpty()) {
+ for (int i = newSectionItems.count(); i < currentCount; ++i) {
+ visualIndicesIn.append(i);
+ logicalIndicesIn.append(i);
+ }
}
const int insertCount = currentCount - newSectionItems.count();
const int insertLength = defaultSectionSizeIn * insertCount;
diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
index 7bfec2831d..b13e7b2f33 100644
--- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
+++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
@@ -171,6 +171,7 @@ private slots:
void saveRestore();
void restoreQt4State();
void restoreToMoreColumns();
+ void restoreToMoreColumnsNoMovedColumns();
void restoreBeforeSetModel();
void defaultSectionSizeTest();
void defaultSectionSizeTestStyles();
@@ -1690,6 +1691,55 @@ void tst_QHeaderView::restoreToMoreColumns()
QCOMPARE(h4.hiddenSectionCount(), 1);
QCOMPARE(h4.sortIndicatorSection(), 2);
QCOMPARE(h4.sortIndicatorOrder(), Qt::DescendingOrder);
+ QCOMPARE(h4.logicalIndex(0), 2);
+ QCOMPARE(h4.logicalIndex(1), 1);
+ QCOMPARE(h4.logicalIndex(2), 0);
+ QCOMPARE(h4.visualIndex(0), 2);
+ QCOMPARE(h4.visualIndex(1), 1);
+ QCOMPARE(h4.visualIndex(2), 0);
+
+ // Repainting shouldn't crash
+ h4.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&h4));
+}
+
+void tst_QHeaderView::restoreToMoreColumnsNoMovedColumns()
+{
+ // Given a model with 2 columns, for saving state
+ QHeaderView h1(Qt::Horizontal);
+ QStandardItemModel model1(1, 2);
+ h1.setModel(&model1);
+ QCOMPARE(h1.visualIndex(0), 0);
+ QCOMPARE(h1.visualIndex(1), 1);
+ QCOMPARE(h1.logicalIndex(0), 0);
+ QCOMPARE(h1.logicalIndex(1), 1);
+ const QByteArray savedState = h1.saveState();
+
+ // And a model with 3 columns, to apply that state upon
+ QHeaderView h2(Qt::Horizontal);
+ QStandardItemModel model2(1, 3);
+ h2.setModel(&model2);
+ QCOMPARE(h2.visualIndex(0), 0);
+ QCOMPARE(h2.visualIndex(1), 1);
+ QCOMPARE(h2.visualIndex(2), 2);
+ QCOMPARE(h2.logicalIndex(0), 0);
+ QCOMPARE(h2.logicalIndex(1), 1);
+ QCOMPARE(h2.logicalIndex(2), 2);
+
+ // When calling restoreState()
+ QVERIFY(h2.restoreState(savedState));
+
+ // Then the index mapping should still be as default
+ QCOMPARE(h2.visualIndex(0), 0);
+ QCOMPARE(h2.visualIndex(1), 1);
+ QCOMPARE(h2.visualIndex(2), 2);
+ QCOMPARE(h2.logicalIndex(0), 0);
+ QCOMPARE(h2.logicalIndex(1), 1);
+ QCOMPARE(h2.logicalIndex(2), 2);
+
+ // And repainting shouldn't crash
+ h2.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&h2));
}
void tst_QHeaderView::restoreBeforeSetModel()