我有一个ListView分为两个部分:收藏夹和常规项目,其模型继承QAbstractItemModel
。对模型中的项目进行排序,使得收藏夹位于常规项目之前,当项目标记为收藏夹时,它将移动到基础列表中的适当位置。
这是模型中执行移动的代码:
if (beginMoveRows(QModelIndex(), position, position, QModelIndex(), newPosition)) {
items.removeAt(position);
items.insert(newPosition + (newPosition < position ? 0 : -1), item);
endMoveRows();
}
但是,每次移动时,ListView的contentY
都会被-delegate.height
更改(在这种情况下为-120px)。唯一可见的变化是滚动条偏移并最终退出屏幕。
发生了什么以及如何解决?
编辑:我发现只有当ListView完全滚动到底部时才会发生这种情况。
答案 0 :(得分:0)
这是对问题的间接解决方案。由于唯一重要的症状是滚动条偏移,我必须找到另一个值来设置滚动条的y
属性:ListView.visibleArea.yPosition
。
这是整个绑定:
Binding {
target: handle
property: "y"
value: (flickable.height - handle.height - 25) * flickable.visibleArea.yPosition / (1 - flickable.visibleArea.heightRatio)
}
说明:
flickable.height - handle.height
- 这是滚动条手柄顶部移动的高度部分25
- 我自己的特定偏移,与其他人无关flickable.visibleArea.yPosition / (1 - flickable.visibleArea.heightRatio)
- 整个数字是从滚动条的最高位置到最低位置(最高y
)的0%到100%的百分比有关ListView.visibleArea.yPosition
的更多信息。