summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-12-03 09:04:07 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2020-12-03 15:46:43 +0000
commit2f747bb57cd958f9fc65f406474c429ca00941ac (patch)
tree68961160243879b8a0280ef8093a32c8f6dbe53a /tests/auto/widgets
parentfaaf8f5c0a73a27a159f00027ebeba5d486be6a9 (diff)
Fix hashing of QPersistentModelIndex
The hash and equality operators used need to be consistent with each other. Unfortunately, QPMI::operator==() is not suitable to do this. So specialize qHashEquals() for QPMI. Fixes: QTBUG-88966 Change-Id: If5f19a722ae9fc4e78e93537e7ea15726f148768 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 83e95956ed58e88b11e2cc3cb61c5beacb7985db) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tests/auto/widgets')
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
index 9a2b5afa6a..3e22181c2f 100644
--- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
@@ -252,6 +252,7 @@ private slots:
void taskQTBUG_61476();
void testInitialFocus();
void fetchUntilScreenFull();
+ void expandAfterTake();
};
class QtTestModel: public QAbstractItemModel
@@ -5218,6 +5219,39 @@ void tst_QTreeView::fetchUntilScreenFull()
QVERIFY(expectedItemNumberFetched);
}
+static void populateModel(QStandardItemModel *model)
+{
+ const int depth = 10;
+ for (int i1 = 0; i1 < depth; ++i1) {
+ QStandardItem *s1 = new QStandardItem;
+ s1->setText(QString::number(i1));
+ model->appendRow(s1);
+ for (int i2 = 0; i2 < depth; ++i2) {
+ QStandardItem *s2 = new QStandardItem;
+ s2->setText(QStringLiteral("%1 - %2").arg(i1).arg(i2));
+ s1->appendRow(s2);
+ for (int i3 = 0; i3 < depth; ++i3) {
+ QStandardItem *s3 = new QStandardItem;
+ s3->setText(QStringLiteral("%1 - %2 - %3").arg(i1).arg(i2).arg(i3));
+ s2->appendRow(s3);
+ }
+ }
+ }
+}
+void tst_QTreeView::expandAfterTake()
+{
+ QStandardItemModel model;
+ populateModel(&model);
+ QTreeView view;
+ view.setUniformRowHeights(true);
+ view.setModel(&model);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+ view.expandAll();
+ model.takeItem(0);
+ populateModel(&model); // populate model again, having corrupted items inside QTreeViewPrivate::expandedIndexes
+ view.expandAll(); // adding new items to QTreeViewPrivate::expandedIndexes with corrupted persistent indices, causing crash sometimes
+}
QTEST_MAIN(tst_QTreeView)
#include "tst_qtreeview.moc"