From da7880b0f032e67e3a2b24ec9bb47259ffd671da Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 15 Apr 2012 23:03:40 +0200 Subject: Update parent indexes first with changePersistentIndex. Otherwise, the order of updating of the indexes will cause inconsistent results because it will rely on ordering within a QHash (which is indeterminate). Task-number: QTBUG-25325 Change-Id: I7d99578c8ee2954b8562dc5aff7dc32e74d41fb5 Reviewed-by: Lars Knoll --- .../itemmodels/qabstractitemmodel/qabstractitemmodel.pro | 1 - tests/auto/other/modeltest/dynamictreemodel.cpp | 12 +++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/itemmodels/qabstractitemmodel/qabstractitemmodel.pro b/tests/auto/corelib/itemmodels/qabstractitemmodel/qabstractitemmodel.pro index 8bfe6628da..9e59251379 100644 --- a/tests/auto/corelib/itemmodels/qabstractitemmodel/qabstractitemmodel.pro +++ b/tests/auto/corelib/itemmodels/qabstractitemmodel/qabstractitemmodel.pro @@ -6,4 +6,3 @@ mtdir = ../../../other/modeltest INCLUDEPATH += $$PWD/$${mtdir} SOURCES = tst_qabstractitemmodel.cpp $${mtdir}/dynamictreemodel.cpp $${mtdir}/modeltest.cpp HEADERS = $${mtdir}/dynamictreemodel.h $${mtdir}/modeltest.h -CONFIG += insignificant_test # QTBUG-25325 diff --git a/tests/auto/other/modeltest/dynamictreemodel.cpp b/tests/auto/other/modeltest/dynamictreemodel.cpp index 325fc19db2..ab783d0ba2 100644 --- a/tests/auto/other/modeltest/dynamictreemodel.cpp +++ b/tests/auto/other/modeltest/dynamictreemodel.cpp @@ -372,7 +372,17 @@ void ModelChangeChildrenLayoutsCommand::doCommand() } } - foreach (const QModelIndex &idx, m_model->persistentIndexList()) { + // If we're changing one of the parent indexes, we need to ensure that we do that before + // changing any children of that parent. The reason is that we're keeping parent1 and parent2 + // around as QPersistentModelIndex instances, and we query idx.parent() in the loop. + QModelIndexList persistent = m_model->persistentIndexList(); + foreach (const QModelIndex &parent, parents) { + int idx = persistent.indexOf(parent); + if (idx != -1) + persistent.move(idx, 0); + } + + foreach (const QModelIndex &idx, persistent) { if (idx.parent() == parent1) { if (idx.row() == rowSize1 - 1) { m_model->changePersistentIndex(idx, m_model->createIndex(0, idx.column(), idx.internalPointer())); -- cgit v1.2.3