diff options
author | Andrei Golubev <andrei.golubev@qt.io> | 2020-08-28 13:19:33 +0200 |
---|---|---|
committer | Andrei Golubev <andrei.golubev@qt.io> | 2020-08-28 14:44:09 +0200 |
commit | 90a053d203fb5c510201b3984090000c1876adad (patch) | |
tree | b0774b630bafa433054ff738af9fed339970ad46 /src/widgets/itemviews | |
parent | 92a32e050fe0c545d0b7b70501c224d09f8d9ed6 (diff) |
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 <sona.kurazyan@qt.io>
Diffstat (limited to 'src/widgets/itemviews')
-rw-r--r-- | src/widgets/itemviews/qtablewidget.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
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<QTableWidgetItem *> newVertical = verticalHeaderItems; QList<QTableWidgetItem *> colItems = columnItems(column); QList<QTableWidgetItem *>::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; |