【问题标题】:Visible items of QML ListViewQML ListView的可见项
【发布时间】:2016-03-29 06:55:27
【问题描述】:

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

【问题讨论】:

  • AFAIK 这是不可能的。您可以获得位于列表视图可见区域内的项目,但列表视图本身可以被其他东西覆盖。使用属性 ListView.contentY、ListView.height 和您的委托高度来计算哪些项目在可见区域内(我假设您有垂直滑动的列表视图和列表项委托的恒定高度)。

标签: qt listview qml


【解决方案1】:

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
    }

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 2012-06-26
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2016-02-12
    相关资源
    最近更新 更多