From 7ddf1b14ecc7e56ddcc78cc7057881d7925d20ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Martsum?= Date: Tue, 18 Jun 2013 10:06:10 +0200 Subject: 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 --- src/widgets/itemviews/qtreewidget.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/widgets/itemviews/qtreewidget.cpp') 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); -- cgit v1.2.3