Как остановить ListView для «прыжка» при смене модели
Что я должен сделать: Мне нужно создатьокно чата используяListView
в QML, где хранятся сообщения чата. Я поставилlistView.positionViewAtEnd()
чтобы следить за последними сообщениями. Я отключаюpositionViewAtEnd
когда я прокручиваю вверх так, что я могу читать прошлые сообщения, не прыгая в конце, каждый раз, когда я получаю новое сообщение.
Эта проблема: После прокрутки вверх, каждый разЯ получаю новое сообщение, что он прыгает в начале списка. Чтобы решить, что мне удаетсяхранитьcontentY
списка и сбрасывать его каждый разonCountChanged
обработчик называется (см. код ниже):
ListView {
id: messagesList
model: contact? contact.messages: []
delegate: delegate
anchors.fill: parent
anchors.bottomMargin: 20
height: parent.height
anchors.margins: 10
property int currentContentY
onMovementEnded: {
currentContentY = contentY
}
onCountChanged: {
contentY = currentContentY
}
onContentYChanged: {
console.log(".....contentY: " + contentY)
}
}
Проблема в том, что, хотя я установил последнийcontentY
До смены моделисписок все еще немного прыгает (несколько пикселей, а не в конце или начале) иэто не всегда прыгает, И когда я иду на вершину списка и печатаюcontentY
Я получаю отрицательные значения, Теоретически,contentY
в начале списка должно быть0
.
Может кто-нибудь сказать мне, что идет не так? Или, может быть, предложить другое решение для создания моего списка сообщений?
Чем ты заранее! :)