我有一个GridView
(LtoR流),它通过QSortFilterProxyModel
动态排序。 GridView始终有100个磁贴。我向下滚动,直到visibleArea.yPosition
为例如0.7(70%)。我等待模型更新,导致瓷砖重新排序。由于瓷砖的nr没有变化,我希望visibleArea.yPosition
保持在0.7 - 但事实并非如此。它改变为其他值(我无法确定一个模式)。同样,originY
会自动从0更改为更高的数字。
这意味着,例如,如果我滚动到网格的末尾并等待一段时间,由于这些更改,我实际上可能会在一段时间后查看网格的开头。我尝试将visibleArea.yPosition
设置为数据更改时最后一次用户交互结束时的值,但QML告诉我该属性是只读的。
为什么GridView的滚动位置会像这样跳转,我该如何阻止它呢?
相关的QML代码:
GridView {
clip: true
model: stateUiItemModel
delegate: myDelegate
anchors.top: commandArea.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: bottomArea.top
cellWidth: itemWidth
cellHeight: itemHeight
transformOrigin: Item.TopLeft
cacheBuffer: 100
visibleArea.onYPositionChanged: {
console.log("ypos " + visibleArea.yPosition + " oy " + originY);
}
}
输出:
qml: ypos 0.7253333333333334 oy 0 // manually scrolled to this point
qml: dynamic sort enabled // from here on GridView repaints with changed sorted order every 500ms
qml: ypos 0.6586666666666666 oy -200
qml: ypos 0.792 oy -400
qml: ypos 0.7253333333333334 oy -400
qml: ypos 0.6586666666666666 oy -500
qml: ypos 0.792 oy -700
qml: ypos 0.7253333333333334 oy -700
qml: ypos 0.6586666666666666 oy -600
qml: ypos 0.592 oy -500
qml: ypos 0.5253333333333333 oy -400
qml: ypos 0.45866666666666667 oy -300
// ... etc, new values every 500ms