Как я могу получить первый видимый элемент / индекс из ListView?
Как я могу получить первый Item
/index
это видно в ListView
? Я заглянул внутрь документации, а также много искал в Интернете, но ничего не смог найти. Кто-нибудь знает как это сделать?
Спасибо!
3 ответа
Вы должны использовать что-то вроде этого:
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
Я знаю, что уже поздно, но для тех, кто ищет помощи:
Вы можете использовать метод члена myView.indexAt(QPoint(0,0))
найти первый индекс.
Я также сделал фрагмент, чтобы найти все видимые индексы в представлении, если вам это тоже нужно: https://gist.github.com/iSplasher/8ebc42eaf9ea206b19bd
Исходя из ответа iSplasher, следующее работает, когда QListView имеет интервал и / или имеет прокрутку за пиксель:
sp = view.spacing()
first = max(view.indexAt(QPoint(sp, 0)), view.indexAt(QPoint(sp, sp * 2)))
Сохранить выбранный индекс при его изменении. Как только модель изменится и индекс станет -1, вы можете использовать positionViewAtIndex
восстановить правильную позицию.
Здесь документация метода.
В противном случае вы можете сделать то же самое, полагаясь на add
а также remove
метод. Очевидно, это работает, насколько изменяется индекс выбранного элемента. Вы также можете получить индекс видимого элемента с помощью indexAt
метод, но я никогда не использовал его раньше, хотя он выглядит простым в использовании.
Итак, у вас есть несколько методов для получения индекса видимого элемента, и вы можете сбросить представление с помощью вышеупомянутого метода.