Qt 移动行时,ListView内容会发生更改

Qt 移动行时,ListView内容会发生更改,qt,listview,qvector,Qt,Listview,Qvector,我的列表视图分为两个部分:收藏夹和常规项,其中一个模型继承了qabstractemmodel。对模型中的项目进行排序,以便收藏夹位于常规项目之前,并且当项目标记为收藏夹时,将其移动到基础列表中的适当位置 这是模型中执行移动操作的代码: if (beginMoveRows(QModelIndex(), position, position, QModelIndex(), newPosition)) { items.removeAt(position); items.insert(n

我的列表视图分为两个部分:收藏夹和常规项,其中一个模型继承了
qabstractemmodel
。对模型中的项目进行排序,以便收藏夹位于常规项目之前,并且当项目标记为收藏夹时,将其移动到基础列表中的适当位置

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

if (beginMoveRows(QModelIndex(), position, position, QModelIndex(), newPosition)) {
    items.removeAt(position);
    items.insert(newPosition + (newPosition < position ? 0 : -1), item);
    endMoveRows();
}
if(beginMoveRows(QModelIndex(),position,position,QModelIndex(),newPosition)){
项目。移除(位置);
项目。插入(新位置+(新位置<位置?0:-1),项目);
endMoveRows();
}
但是,每次移动时,ListView的
内容都会被
-delegate.height
(-120px)更改。唯一可见的变化是滚动条偏移并最终退出屏幕

发生了什么事,我该怎么解决


编辑:我发现只有当ListView完全滚动到底部时才会发生这种情况。

这是一种间接解决问题的方法。由于这种情况的唯一重要症状是滚动条偏移,因此我必须找到另一个值来设置滚动条的
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%的百分比
更多关于