QML ListView的可见项目

时间:2016-03-29 06:55:27

标签: qt listview qml

我正在尝试获取QML ListView的所有可见项目(即只有眼睛可见的项目),但我不知道如何实现此功能。也许存在一些工作方法?提前谢谢。

1 个答案:

答案 0 :(得分:0)

indexAt(real x,real y)可用于计算可见项的索引范围。

https://doc.qt.io/qt-5/qml-qtquick-listview.html#indexAt-method

我不知道会为您提供可见项目的索引范围的功能。您必须根据商品大小和特定的布局提出自己的实施方案。

这是一种可能的实现方式:

ListView {
    id: listView

    function getVisibleIndexRange() {
        var center_x = listView.x + listView.width / 2
        return [indexAt( center_x, listView.y + listView.contentY + 10),
                indexAt( center_x, listView.y + listView.contentY + listView.height - 10)]
    }
}

这是我正在使用的实现:

    id: listView

    onContentXChanged: {
        var idx = 0
        if ( listView.atXBeginning ) {
            idx = 0
        }
        else if ( listView.atXEnd ) {
            idx = listViewModel.count - 1
        }
        else {
            idx = listView.indexAt( listView.contentX + listView.width / 2,
                                    listView.y + listView.height / 2 )
        }

        //Do things with idx
    }