summaryrefslogtreecommitdiffstats
path: root/src/widgets/itemviews/qtreewidget.cpp
diff options
context:
space:
mode:
authorThorbjørn Martsum <tmartsum@gmail.com>2013-06-18 10:06:10 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-06-21 18:59:37 +0200
commit7ddf1b14ecc7e56ddcc78cc7057881d7925d20ff (patch)
tree394efa74f36bd6956428ec8f76a7e1ca11a3d7aa /src/widgets/itemviews/qtreewidget.cpp
parent6347afbfdda62d243ef1751437a3b0670a7879a8 (diff)
QTreeWidget - iterator fix in QTreeModel::ensureSorted
We can not trust the iterator when we do erase. This patch makes an index while we do a takeAt and then we restore the iterator from that index. This both ensures that we can merge an iterator check and ensures consistent behavior. Change-Id: Icbe67051cb055d24541475e826109212eba9dd30 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/widgets/itemviews/qtreewidget.cpp')
-rw-r--r--src/widgets/itemviews/qtreewidget.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp
index f72abd20ab..2de7830c6a 100644
--- a/src/widgets/itemviews/qtreewidget.cpp
+++ b/src/widgets/itemviews/qtreewidget.cpp
@@ -623,7 +623,13 @@ void QTreeModel::ensureSorted(int column, Qt::SortOrder order,
for (int i = 0; i < count; ++i) {
int oldRow = sorting.at(i).second;
+
+ int tmpitepos = lit - lst.begin();
QTreeWidgetItem *item = lst.takeAt(oldRow);
+ if (tmpitepos > lst.size())
+ --tmpitepos;
+ lit = lst.begin() + tmpitepos;
+
lit = sortedInsertionIterator(lit, lst.end(), order, item);
int newRow = qMax(lit - lst.begin(), 0);