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时,以及滚动是每像素而不是每项时,它不一定有效