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

Excessive delegate creation+destruction when calling list<T>.shift() on ListView.model

    XMLWordPrintable

Details

    Description

      Code

      import QtQuick
      import QtQuick.Controls.Basic
      import QtQuick.Layouts
      
      Window {
          id: root
          width: 640
          height: 480
          visible: true
      
          property list<int> numbers: [11, 22, 33]
      
          ColumnLayout {
              anchors.fill: parent
      
              Button {
                  text: "Remove First Number"
                  onClicked: {
                      let num = root.numbers.shift()
                      console.log("Removed", num)
                  }
              }
              ListView {
                  Layout.preferredWidth: 100
                  Layout.fillHeight: true
                  model: root.numbers
                  delegate: Label {
                      required property int modelData
                      text: modelData
                      Component.onCompleted: console.log("Delegate created for value", modelData)
                      Component.onDestruction: console.log("Delegate destroyed for value", modelData)
                  }
              }
          }
      }
      

       

      Outcomes
      Program startup:

      qml: Delegate created for value 11
      qml: Delegate created for value 22
      qml: Delegate created for value 33
      

      1st click:

      qml: Delegate destroyed for value 22
      qml: Delegate destroyed for value 33
      qml: Delegate destroyed for value 11
      qml: Delegate created for value 22
      qml: Delegate created for value 22
      qml: Delegate created for value 33
      qml: Delegate destroyed for value 22
      qml: Delegate destroyed for value 33
      qml: Delegate destroyed for value 22
      qml: Delegate created for value 22
      qml: Delegate created for value 33
      qml: Delegate created for value 33
      qml: Delegate destroyed for value 33
      qml: Delegate destroyed for value 33
      qml: Delegate destroyed for value 22
      qml: Delegate created for value 22
      qml: Delegate created for value 33
      qml: Delegate created for value 0
      qml: Delegate destroyed for value 33
      qml: Delegate destroyed for value 0
      qml: Delegate destroyed for value 22
      qml: Delegate created for value 22
      qml: Delegate created for value 33
      qml: Removed 11
      

      2nd click:

      qml: Delegate destroyed for value 33
      qml: Delegate destroyed for value 22
      qml: Delegate created for value 33
      qml: Delegate created for value 33
      qml: Delegate destroyed for value 33
      qml: Delegate destroyed for value 33
      qml: Delegate created for value 33
      qml: Delegate created for value 0
      qml: Delegate destroyed for value 0
      qml: Delegate destroyed for value 33
      qml: Delegate created for value 33
      qml: Removed 22
      

      3rd click:

      qml: Delegate destroyed for value 33
      qml: Delegate created for value 0
      qml: Delegate destroyed for value 0
      qml: Removed 33
      

      Attachments

        Issue Links

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

          Activity

            People

              qt.team.quick.subscriptions Qt Quick and Widgets Team
              skoh-qt Sze Howe Koh
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:

                Gerrit Reviews

                  There are no open Gerrit changes