import QtQuick 2.6 ListView { id: lv // How many rows per page property int pageSize: 5 // The current page number property int currentPage: 1 // How large a single item is property int itemSize: 100 // Arbitrary property int totalPages: 5 height: itemSize * pageSize // display one full page at a time width: 500 // arbitrary. model: pageSize * totalPages delegate: Text { height: itemSize text: "Item " + (index + 1) + " of " + lv.count } // contentY should be < 0 to account for header visibility onContentYChanged: console.log(contentY) headerPositioning: ListView.OverlayHeader header: Rectangle { height: itemSize width: 500 z: 1000 visible: false color: "black" Text { anchors.centerIn: parent color: "red" text: "List header" } } onCurrentPageChanged: { lv.positionViewAtIndex((currentPage - 1) * pageSize, ListView.Beginning); } }