summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui
diff options
context:
space:
mode:
authorChristian Ehrlicher <ch.ehrlicher@gmx.de>2019-12-06 21:56:41 +0100
committerChristian Ehrlicher <ch.ehrlicher@gmx.de>2019-12-14 08:46:05 +0100
commit4522b17159a29ffd12c4d93be8a6e8e1a05dccd0 (patch)
tree6e63dc27e8c3c1bf3b0b2bec84aa97155fc6a10d /tests/auto/gui
parente076965542148b8c2341fd4418733febbf9ae1ec (diff)
QStandardItemModel: do not reset persisten index in setItem()
When an existing item is replaced with a new one in QStandardItemModel::setItem() then the persitent index is invalidated which leads to some unexpected behaviors (like e.g the header size and resize mode are reset). Therefore we have to make sure that the invalidation does not happen. This can be achieved by delaying the call to QStandardItem::setModel() for the old item until the new is properly added. After this, the old item no longer gets a valid QModelIndex from the model and therefore can't invalidate the persistent index anymore. Fixes: QTBUG-13605 Fixes: QTBUG-73000 Fixes: QTBUG-80586 Change-Id: I4e45e6feb81b7287c0859f638d7ab1a576fc2f0f Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'tests/auto/gui')
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
index bc8bc38da6..032f17c0a7 100644
--- a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
+++ b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
@@ -131,6 +131,7 @@ private slots:
void supportedDragDropActions();
void taskQTBUG_45114_setItemData();
+ void setItemPersistentIndex();
private:
QStandardItemModel *m_model;
@@ -1811,5 +1812,26 @@ void tst_QStandardItemModel::taskQTBUG_45114_setItemData()
QVERIFY(!itemRoles.keys().contains(Qt::UserRole + 3));
}
+void tst_QStandardItemModel::setItemPersistentIndex()
+{
+ QPersistentModelIndex persistentIndex;
+ // setItem on an already existing item should not destroy the persistent index
+ QStandardItemModel m;
+ persistentIndex = m.index(0, 0);
+ QVERIFY(!persistentIndex.isValid());
+
+ m.setItem(0, 0, new QStandardItem);
+ persistentIndex = m.index(0, 0);
+ QVERIFY(persistentIndex.isValid());
+ QCOMPARE(persistentIndex.row(), 0);
+ QCOMPARE(persistentIndex.column(), 0);
+
+ m.setItem(0, 0, new QStandardItem);
+ QVERIFY(persistentIndex.isValid());
+
+ m.setItem(0, 0, nullptr);
+ QVERIFY(!persistentIndex.isValid());
+}
+
QTEST_MAIN(tst_QStandardItemModel)
#include "tst_qstandarditemmodel.moc"