QML: плоский вид списка без прокрутки

#qt #qml #qtquick2 #qtquickcontrols2

#qt #qml #qtquick2 #qtquickcontrols2

Вопрос:

Я хочу, чтобы в большом ScrollView два просмотра списка следовали друг за другом, скажем, потому, что у них немного разные делегаты. Итак, макет выглядит следующим образом:

Макет с двумя видами списка в режиме прокрутки]

К сожалению, тип ListView также является изменяемым, поэтому он не представляет все свое содержимое в виде плоского списка, подходящего для просмотра в режиме прокрутки. Итак, как мне сделать это с помощью Qt Quick views?

Я попробовал трюк: я могу изменять размеры представлений списка следующим образом:

     ListView {
        id: list1

        height: contentHeight   spacing * count

        model: superModel
        delegate: delegate1
    }
  

К сожалению, помимо того, что это грязный взлом и создает ненужный перелистываемый захват моих кликов, на самом деле это не работает: контент просто не помещается, поскольку все еще есть верхние и нижние поля, значение которых я не знаю.

Ответ №1:

Вы должны использовать a ColumnLayout с двумя Repeater в a ScrollView (или Flickable , если хотите)

 ScrollView {
    contentWidth: width   //maybe you don't need this

    ColumnLayout {
        width: parent.width   //maybe you don't need this

        Repeater {
            model: superModel1
            delegate: delegate1
        }

        Repeater {
            model: superModel2
            delegate: delegate2
        }
    }
}
  

Поскольку вы не показали делегат, вам может потребоваться незначительная настройка implicitHeight и / или implicitWidth .

Комментарии:

1. Спасибо, это именно то, что мне было нужно. На данный момент даже не потребовалось никаких неявных настроек.