Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-89957

An empty ListView re-positions to beginning after the header height changes



    • Type: Bug
    • Status: Reported
    • Priority: P3: Somewhat important
    • Resolution: Unresolved
    • Affects Version/s: 5.15.0
    • Fix Version/s: None
    • Labels:


      I have observed the following, somehow strange behaviour:

      I am using a ListView to render some items, i.e. I have a model and a delegate defined for this. In addition, I am using a header and footer in the view, to render additional meta information. In the concrete app where I initially observed this behaviour, I have some interactive components in the header and footer, which can change their height while the user interacts with them (most notably, by entering multi-line text). As soon as such a change of the header height happens and the list view is otherwise "empty" (i.e. the model currently holds zero items), the view is positioned back at the beginning of the list.


      I managed to break this down into a small example:

      import QtQuick 2.12
      import QtQuick.Controls 2.5
      ApplicationWindow {
          width: 640
          height: 480
          visible: true
          title: qsTr("Scroll")
          ScrollView {
              anchors.fill: parent
              ListView {
                  id: listView
                  width: parent.width
                  model: 100
                  delegate: ItemDelegate {
                      text: "Item " + (index + 1)
                      width: listView.width
                  header: Column {
                      Button {
                          text: qsTr("Toggle List View Items")
                          onClicked: if (listView.model === 0) {
                                         listView.model = 100;
                                     } else {
                                         listView.model = 0;
                      Item {
                          id: spacer
                          property int foo: 1
                          width: 1
                          height: (foo % 2 == 0) ? 100 : 150
                          Timer {
                              interval: 2000
                              repeat: true
                              running: true
                              onTriggered: spacer.foo += 1
                  footer: Item {
                      height: 3000
                      width: parent.width
                      TextField {
                          width: parent.width
                          placeholderText: qsTr("Write something here")

      Here, I have a header which changes its height every two seconds. By default, the list view contains some items, hence, everything behaves fine. However, by clicking the button, the list is emptied. Afterwards, when scrolling down, the view will reset the position as soon as the header height changes again.

      I know that this rather might be a corner case, but would be cool if this still could be fixed


        No reviews matched the request. Check your Options in the drop-down menu of this sections header.



            qt.team.quick.subscriptions Qt Quick and Widgets Team
            mhoeher Martin Höher
            0 Vote for this issue
            1 Start watching this issue



                Gerrit Reviews

                There are no open Gerrit changes