Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
5.15, 6.8
-
None
Description
When we use the following chain of models && listview:
source -> proxy -> listview
and do call the proxy->sort(), then all fine, the listview position stays same (scroll stays same).
But, when we use the following chain of models && listview:
source -> proxy1 -> proxy2 -> listview
and do call the proxy1->sort() then all breaks, the listview position resets to the beginning (scroll resets to beginning)
Why this happens, and how to stay the position same? This happens with all Qt versions from up 5.x to 6x.
This example demonstrates a problem:
Window { width: 400 height: 400 visible: true title: qsTr("Hello World") MyListModel { id: sm } MyProxyModel { id: pm1; sourceModel: sm } MyProxyModel { id: pm2; sourceModel: pm1 } ColumnLayout { anchors.fill: parent ListView { id: lview currentIndex: -1 clip: true spacing: 0 highlightFollowsCurrentItem: false model: pm2 delegate: ItemDelegate { text: model.id highlighted: ListView.isCurrentItem onClicked: lview.currentIndex = index } Layout.fillWidth: true Layout.fillHeight: true ScrollBar.vertical: ScrollBar {} } Button { text: "Sort" onClicked: pm1.doSort() // << We need to call exactly pm1 sort!!! Layout.fillWidth: true } } }
How to reproduce an issue:
1. Compile && run the application
2. Scroll to somewhere (e.g. to end)
3. Click to "Sort" button
4. Watch for the view reset up the beginning (with the scroll).
If to change the listview model to `pm1` and then call `pm1->sort()` then this bug does not happens.