0

我有一个 ListView 分为两部分:收藏夹和常规项目,具有继承的模型QAbstractItemModel。模型中的项目被排序,以便收藏在常规项目之前,当一个项目被标记为收藏时,它被移动到基础列表中的适当位置。

这是模型中执行移动的代码:

if (beginMoveRows(QModelIndex(), position, position, QModelIndex(), newPosition)) {
    items.removeAt(position);
    items.insert(newPosition + (newPosition < position ? 0 : -1), item);
    endMoveRows();
}

但是,每次发生移动时,ListViewcontentY都会更改-delegate.height(在本例中为 -120px)。唯一可见的变化是滚动条偏移并最终退出屏幕。

发生了什么事,我该如何解决?

编辑:我发现这只发生在 ListView 完全滚动到底部时。

4

1 回答 1

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.

于 2015-09-25T08:27:36.090 回答