import QtQuick 2.0 Rectangle { property bool sectionsInvalidOnCompletion width: 240 height: 320 color: "#ffffff" resources: [ Component { id: myDelegate Item { id: wrapper function validateInitialSections() { var invalid = false if (index == 0) { invalid |= wrapper.ListView.previousSection != "" } if (index == model.count - 1) { invalid |= wrapper.ListView.nextSection != "" } if (index % 5 == 0 && index > 0) { invalid |= wrapper.ListView.previousSection != Number(wrapper.ListView.section) - 1 } else if ((index + 1) % 5 == 0 && index < model.count - 1) { invalid |= wrapper.ListView.nextSection != Number(wrapper.ListView.section) + 1 } else if (index > 0 && index < model.count - 1) { invalid |= wrapper.ListView.previousSection != wrapper.ListView.section invalid |= wrapper.ListView.nextSection != wrapper.ListView.section } sectionsInvalidOnCompletion |= invalid } objectName: "wrapper" height: ListView.previousSection != ListView.section ? 40 : 20; width: 240 Rectangle { y: wrapper.ListView.previousSection != wrapper.ListView.section ? 20 : 0 height: 20 width: parent.width color: wrapper.ListView.isCurrentItem ? "lightsteelblue" : "white" Text { text: index } Text { x: 30 id: textName objectName: "textName" text: name } Text { x: 100 id: textNumber objectName: "textNumber" text: number } Text { objectName: "nextSection" x: 150 text: wrapper.ListView.nextSection } Text { x: 200 text: wrapper.y } } Rectangle { color: "#99bb99" height: wrapper.ListView.previousSection != wrapper.ListView.section ? 20 : 0 width: parent.width visible: wrapper.ListView.previousSection != wrapper.ListView.section ? true : false Text { text: wrapper.ListView.section } } ListView.onPreviousSectionChanged: validateInitialSections() ListView.onNextSectionChanged: validateInitialSections() ListView.onSectionChanged: validateInitialSections() Component.onCompleted: validateInitialSections() } } ] ListView { id: list objectName: "list" width: 240 height: 320 model: testModel delegate: myDelegate section.property: "number" } }