Qt 如何从ListView中获取第一个可见项/索引?

Qt 如何从ListView中获取第一个可见项/索引?,qt,listview,qml,qtquick2,qqmlcomponent,Qt,Listview,Qml,Qtquick2,Qqmlcomponent,如何获取在列表视图中可见的第一个项目/索引?我查阅了文档,也在互联网上搜索了很多,但什么也没找到。有人知道怎么做吗 谢谢大家! 在选定索引更改时存储该索引。 一旦模型更改且索引变为-1,您可以使用positionviewatinex恢复正确的位置 方法的文档 否则,您可以依靠add和remove方法执行相同的操作。 显然,只要所选项目的索引发生变化,它就会起作用。 您还可以通过indexAt方法获取可见项的索引,但我以前从未使用过它,尽管它看起来很容易使用 因此,您有几种方法来获取可见项的索引,

如何获取在
列表视图中可见的第一个
项目
/
索引
?我查阅了文档,也在互联网上搜索了很多,但什么也没找到。有人知道怎么做吗


谢谢大家!

在选定索引更改时存储该索引。 一旦模型更改且索引变为-1,您可以使用
positionviewatinex
恢复正确的位置

方法的文档

否则,您可以依靠
add
remove
方法执行相同的操作。 显然,只要所选项目的索引发生变化,它就会起作用。 您还可以通过
indexAt
方法获取可见项的索引,但我以前从未使用过它,尽管它看起来很容易使用


因此,您有几种方法来获取可见项的索引,您可以通过上述方法重置视图。

我知道这已经晚了,但对于寻求帮助的其他人:

您可以使用member方法
myView.indexAt(QPoint(0,0))
查找第一个索引

如果您也需要,我还制作了一个片段来查找视图中的所有可见索引:

您应该使用以下内容:

ListView {
        id: contacts
        model: UsersModel

        onContentYChanged: {
            var CurrentIndexAtTop = indexAt(1, contentY)
            var CurrentPropFromModel = UsersModel.get(CurrentIndexAtTop).Name
        }
}
如果indexAt return-1表示未找到,请在需要时检查此项! contentY-它是ListView的一个属性,返回flickable grid ListView上ViewList窗口的当前位置顶部Y坐标


有关更多详细信息,请参阅文档

根据iSplasher的回答,当QListView具有间距和/或按像素滚动时,以下功能有效:

sp = view.spacing()
first = max(view.indexAt(QPoint(sp, 0)), view.indexAt(QPoint(sp, sp * 2)))

您可能可以利用
highlightRangeMode
contentY
属性。不管怎样,你为什么想知道?您希望实现的具体结果是什么?我希望即使模型发生更改,列表视图仍保持在当前位置。现在,如果我的模型改变了,列表会从一开始跳起来。哦,另一个问题的问题。也许,
highlightRangeMode
会有所帮助。好的,看看这个。这种方法可能存在的缺点是列表在突出显示范围内剧烈移动,这意味着,当列表结束时,只有最后一个
项在列表顶部可见。查看该方法是否适合您的用例。很高兴知道,但当间距>0时,以及滚动是每像素而不是每项时,它不一定有效