From 90a053d203fb5c510201b3984090000c1876adad Mon Sep 17 00:00:00 2001 From: Andrei Golubev Date: Fri, 28 Aug 2020 13:19:33 +0200 Subject: [PATCH] Properly fix issue in qtablewidget.cpp The original fix done in 4b2f5371d9ba7b8d2dc068223866bbb3c8242beb actually introduced another subtle issue which should in theory cause additional overhead. Fixed the behavior to be in fact compatible to the old one Task-number: QTBUG-84320 Change-Id: I22b130076f9eedbcf7c5eeae78362adfd0eee9af Reviewed-by: Sona Kurazyan --- src/widgets/itemviews/qtablewidget.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp index ac59271c8d..f4f61369b6 100644 --- a/src/widgets/itemviews/qtablewidget.cpp +++ b/src/widgets/itemviews/qtablewidget.cpp @@ -584,12 +584,15 @@ void QTableModel::ensureSorted(int column, Qt::SortOrder order, QList newVertical = verticalHeaderItems; QList colItems = columnItems(column); QList::iterator vit = colItems.begin(); + qsizetype distanceFromBegin = 0; bool changed = false; for (int i = 0; i < sorting.count(); ++i) { + distanceFromBegin = std::distance(colItems.begin(), vit); int oldRow = sorting.at(i).second; QTableWidgetItem *item = colItems.at(oldRow); colItems.remove(oldRow); - vit = sortedInsertionIterator(colItems.begin(), colItems.end(), order, item); + vit = sortedInsertionIterator(colItems.begin() + distanceFromBegin, colItems.end(), order, + item); int newRow = qMax((int)(vit - colItems.begin()), 0); if ((newRow < oldRow) && !(*item < *colItems.at(oldRow - 1)) && !(*colItems.at(oldRow - 1) < *item)) newRow = oldRow;