summaryrefslogtreecommitdiffstats
path: root/src/corelib/itemmodels
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/itemmodels')
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
index 68f6c2ebf2..ebc97ca2d9 100644
--- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp
+++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
@@ -458,10 +458,21 @@ void QSortFilterProxyModelPrivate::sort()
*/
bool QSortFilterProxyModelPrivate::update_source_sort_column()
{
- Q_Q(QSortFilterProxyModel);
- QModelIndex proxy_index = q->index(0, proxy_sort_column, QModelIndex());
int old_source_sort_column = source_sort_column;
- source_sort_column = q->mapToSource(proxy_index).column();
+
+ if (proxy_sort_column == -1) {
+ source_sort_column = -1;
+ } else {
+ // We cannot use index mapping here because in case of a still-empty
+ // proxy model there's no valid proxy index we could map to source.
+ // So always use the root mapping directly instead.
+ Mapping *m = create_mapping(QModelIndex()).value();
+ if (proxy_sort_column < m->source_columns.size())
+ source_sort_column = m->source_columns.at(proxy_sort_column);
+ else
+ source_sort_column = -1;
+ }
+
return old_source_sort_column != source_sort_column;
}