Как я могу получить первый видимый элемент/индекс из ListView?

Как я могу получить первый Item/index, видимый в ListView? Я просмотрел документацию, а также много искал в Интернете, но ничего не нашел. Кто-нибудь знает как это сделать?

Благодарю вас!


person Ispas Claudiu    schedule 25.06.2015    source источник
comment
Вероятно, вы можете использовать свойства highlightRangeMode или contentY. Впрочем, зачем тебе это знать? Какого конкретного результата вы хотите достичь?   -  person BaCaRoZzo    schedule 25.06.2015
comment
Я хочу сохранить представление списка в текущей позиции, даже если модель будет изменена. Теперь, если моя модель изменена, список переходит в начало.   -  person Ispas Claudiu    schedule 25.06.2015
comment
О, проблема из другого вопроса. Возможно, highlightRangeMode мог бы помочь.   -  person BaCaRoZzo    schedule 25.06.2015
comment
Хорошо, взгляните на этот пример. Возможным недостатком этого подхода является то, что список перемещается строго в пределах диапазона выделения, что означает, что в конце списка виден только последний Item в верхней части списка. Посмотрите, подходит ли подход к вашему варианту использования.   -  person BaCaRoZzo    schedule 25.06.2015


Ответы (4)


Вы должны использовать что-то вроде этого:

ListView {
        id: contacts
        model: UsersModel

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

если indexAt return -1 означает, что не найдено, проверьте это, если нужно! contentY - это свойство ListView, которое возвращает текущую координату верхней Y-координаты окна ViewList в пролистываемой сетке ListView.

см. документацию для более подробной информации http://doc.qt.io/qt-5/qml-qtquick-listview.html#indexAt-method

person Denis K.    schedule 15.03.2017

Я знаю, что уже поздно, но для других, ищущих помощи:

Вы можете использовать метод-член myView.indexAt(QPoint(0,0)), чтобы найти первый индекс.

Я также сделал фрагмент, чтобы найти все видимые индексы в представлении, если вам это тоже нужно: https://gist.github.com/iSplasher/8ebc42eaf9ea206b19bd

person iSplasher    schedule 26.12.2015
comment
полезно знать, но это не обязательно будет работать с интервалом › 0 и когда прокрутка выполняется на пиксель, а не на элемент - person user3496846; 31.01.2019

Сохранить выбранный индекс при его изменении. Как только модель изменится и индекс станет -1, вы можете использовать positionViewAtIndex для восстановления правильного положения.

Здесь документация по методу.

В противном случае вы можете сделать то же самое, полагаясь на метод add и remove. Очевидно, это работает до тех пор, пока меняется индекс выбранного элемента. Вы также можете получить индекс видимого элемента с помощью метода indexAt, но я никогда не использовал его раньше, хотя он выглядит простым в использовании.

Итак, у вас есть несколько способов получить индекс видимого элемента, и вы можете сбросить представление с помощью метода, упомянутого выше.

person skypjack    schedule 25.06.2015

Основываясь на ответе iSplasher, следующее работает, когда QListView имеет интервал и/или прокручивает по пикселям:

sp = view.spacing()
first = max(view.indexAt(QPoint(sp, 0)), view.indexAt(QPoint(sp, sp * 2)))
person user3496846    schedule 31.01.2019