Qt Quick GridView在排序时更改滚动位置

时间:2015-06-17 14:20:39

标签: qt gridview qml qt-quick

我有一个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

0 个答案:

没有答案