diff options
author | Libor Tomsik <libor@tomsik.eu> | 2015-09-25 10:04:21 +0200 |
---|---|---|
committer | Libor Tomsik <libor@tomsik.eu> | 2015-10-07 18:19:57 +0000 |
commit | 3c449f7da5b606a83cabc35ccff9c71826561b02 (patch) | |
tree | 1b446c7c1a4fa77163d7085b8f90b07983e5cdfc /src/widgets | |
parent | c7e5e1d9e01849347a9e59b8285477a20d82002b (diff) |
Fix selected items after sorting in QTableWidget
OldPersistentIndexes store selected items during sort operation. They
were wrongly taken from static list of indexes. This change takes them
from parent (QTableWidget) who maintains the list of selected segments.
Task-number: QTBUG-48408
Change-Id: Ie1bc4071a275dd76d113d883ab30ccd4cb1fa625
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/itemviews/qtablewidget.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp index f0c7ac0d32..a10b95f701 100644 --- a/src/widgets/itemviews/qtablewidget.cpp +++ b/src/widgets/itemviews/qtablewidget.cpp @@ -555,9 +555,7 @@ void QTableModel::ensureSorted(int column, Qt::SortOrder order, LessThan compare = (order == Qt::AscendingOrder ? &itemLessThan : &itemGreaterThan); std::stable_sort(sorting.begin(), sorting.end(), compare); - - QModelIndexList oldPersistentIndexes = persistentIndexList(); - QModelIndexList newPersistentIndexes = oldPersistentIndexes; + QModelIndexList oldPersistentIndexes, newPersistentIndexes; QVector<QTableWidgetItem*> newTable = tableItems; QVector<QTableWidgetItem*> newVertical = verticalHeaderItems; QVector<QTableWidgetItem*> colItems = columnItems(column); @@ -573,7 +571,12 @@ void QTableModel::ensureSorted(int column, Qt::SortOrder order, newRow = oldRow; vit = colItems.insert(vit, item); if (newRow != oldRow) { - changed = true; + if (!changed) { + emit layoutAboutToBeChanged(); + oldPersistentIndexes = persistentIndexList(); + newPersistentIndexes = oldPersistentIndexes; + changed = true; + } // move the items @ oldRow to newRow int cc = columnCount(); QVector<QTableWidgetItem*> rowItems(cc); @@ -600,7 +603,6 @@ void QTableModel::ensureSorted(int column, Qt::SortOrder order, } if (changed) { - emit layoutAboutToBeChanged(); tableItems = newTable; verticalHeaderItems = newVertical; changePersistentIndexList(oldPersistentIndexes, |