summaryrefslogtreecommitdiffstats
path: root/src/widgets/itemviews
diff options
context:
space:
mode:
authorAndrei Golubev <andrei.golubev@qt.io>2020-08-28 13:19:33 +0200
committerAndrei Golubev <andrei.golubev@qt.io>2020-08-28 14:44:09 +0200
commit90a053d203fb5c510201b3984090000c1876adad (patch)
treeb0774b630bafa433054ff738af9fed339970ad46 /src/widgets/itemviews
parent92a32e050fe0c545d0b7b70501c224d09f8d9ed6 (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.cpp5
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;