Заполнители пустых строк Qml ListView, как в TableView

Я хочу, чтобы ListView отображал пустые строки до конца своей высоты. Как TableView, но с ListView.

Это возможно?

введите здесь описание изображения


person Community    schedule 29.03.2016    source источник


Ответы (2)


С помощью ребят из Qt мы получили хорошее решение (этот код находится внутри ListView, который находится внутри ScrollView):

Component {
    id: rectComp
    Rectangle {
        id: rowHeaderRect
        height: 50
        color:  rowIndex % 2 == 0 ? Theme.rowColor : Theme.altRowColor
    }
}
Column {
    id: rowfiller    
    Loader {
        id: rowSizeItem
        sourceComponent: rectComp
        visible: false
    }
    property int rowHeight: rowSizeItem.implicitHeight
    property int paddedRowCount: height/rowHeight

    y: listview.contentHeight - listview.contentY + listview.originY
    width: parent.width
    visible: true
    height: scrollview.viewport.height - listview.contentHeight
    Repeater {
        model: visible ? parent.paddedRowCount : 0
        Loader {
            property int rowIndex: index
            width: rowfiller.width
            height: rowfiller.rowHeight
            sourceComponent: rectComp;
        }
    }
}
person Community    schedule 01.04.2016

Очень простой подход.

Во-первых, определите высоту элемента:

property int itemHeight: 40

Затем на ListView:

Component.onCompleted: {
            var numItems = mainForm.height / itemHeight
            for(var i=0; i < numItems; i++) {
                listView1.model.append({})
            }
        }

где mainForm является родителем listview1.

Чтобы пустые строки отображались правильно, вы можете проверить наличие свойства элемента, то есть:

color: colorCode ? colorCode : "white"

text: name ? name : ""
person perencia    schedule 29.03.2016
comment
Ну, это не совсем решение. Элементы могут иметь переменную высоту, также нам нужно будет проверять каждый раз, когда мы добавляем новые элементы, нужно ли нам удалять пустые строки. - person ; 30.03.2016
comment
Это не полное решение, но ваш ответ тоже не был полным :) - person perencia; 30.03.2016