-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
5.15, 6.8
-
None
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.