Wie stoppe ich ListView für "Jumping", wenn das Modell geändert wird?

Was ich tun mus: Ich muss ein @ erstellchat window Verwendung einerListView in QML, in der die Chat-Nachrichten gespeichert sind. Ich setzelistView.positionViewAtEnd(), um den letzten Nachrichten zu folgen. Ich deaktivierepositionViewAtEnd Wenn ich nach oben scrolle, um die letzten Nachrichten zu lesen, ohne jedes Mal, wenn ich eine neue Nachricht erhalte, am Ende zu springen.

Das Proble: Nach dem Scrollen jedes MalIch erhalte eine neue Nachricht, es springt am Anfang der Liste. Um das zu lösen schaffe ich es zustore thecontentY der Liste und setze sie jedes Mal zurückonCountChangedhandler heißt (siehe Code unten):

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)
    }
}   

Das Problem ist, dass obwohl ich das letzte @ gesetzt hacontentY Ich hatte, bevor das Modell geändert wurde, dielist springt noch ein bisschen ( mehrere Pixel, nicht am Ende oder am Anfang) undes springt nicht immer. Und wenn ich an den Anfang der Liste gehe und das @ druccontentY Ich erhalte negative Werte. Theoretisch istcontentY am Anfang der Liste sollte @ se0.

Kann mir jemand sagen, was falsch läuft? Oder schlagen Sie eine andere Lösung vor, um meine Nachrichtenliste zu erstellen?

Than Sie im Voraus! :)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage