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

时间:2015-06-25 10:56:11

标签: qt listview qml qtquick2 qqmlcomponent

如何获得Item中可见的第一个index / ListView?我查看了文档,并在互联网上搜索了很多,但无法找到任何内容。有谁知道怎么做?

谢谢!

4 个答案:

答案 0 :(得分:3)

你应该使用类似的东西:

ListView {
        id: contacts
        model: UsersModel

        onContentYChanged: {
            var CurrentIndexAtTop = indexAt(1, contentY)
            var CurrentPropFromModel = UsersModel.get(CurrentIndexAtTop).Name
        }
}

如果indexAt返回-1表示未找到,请检查是否需要! contentY - 它是ListView的一个属性,它在可滑动网格ListView上返回ViewList窗口的当前位置顶部Y-coord。

请参阅文档以获取更多详细信息http://doc.qt.io/qt-5/qml-qtquick-listview.html#indexAt-method

答案 1 :(得分:1)

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

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

如果您还需要,我还会在视图中找到所有可见索引的片段: https://gist.github.com/iSplasher/8ebc42eaf9ea206b19bd

答案 2 :(得分:0)

更改时存储选定的索引。 模型更改后索引变为-1,您可以使用positionViewAtIndex恢复正确的位置。

Here该方法的文档。

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

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

答案 3 :(得分:0)

基于iSplasher的回答,当QListView具有间距和/或按像素滚动时,以下内容可以工作:

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