Как щелкнуть QML ListView по горизонтали и вертикали

Я хочу отобразить большой список на маленьком дисплее. Проблема с ListView заключается в том, что мне нужно настроить ориентацию, независимо от того, горизонтальная она или вертикальная.

То, что я пытался это:

  1. Я вставил ListView в Flickable, и настроил Flickable для горизонтальной прокрутки и представление для вертикальной прокрутки, но затем я не могу пролистать в обе стороны одновременно
  2. Я попытался установить для свойства flickableDirection ListView значение Flickable.HorizontAndVerticalFlick, но это не сработало.

Вот простой пример:

import QtQuick 2.2
import QtQuick.Window 2.1

Window {
    visible: true
    width: 360
    height: 360

    ListModel {
        id: fruitModel

        ListElement {
            name: "Apple"
            cost: 2.45
        }
        ListElement {
            name: "Orange"
            cost: 3.25
        }
        ListElement {
            name: "Banana"
            cost: 1.95
        }
    }

    ListView {
        anchors.fill: parent

        model: fruitModel

        delegate: Rectangle {
            id: delegateRect
            height: 150
            width: 545

            border.color: "steelblue"
            border.width: 1

            Row {
                Text {
                    id: nameLabel
                    width: 345
                    text: name
                }

                Text {
                    id: costLabel
                    width: 200
                    text: cost
                }
            }
        }
    }
}

2 ответа

Решение

Я думаю, что решение, которое вы ищете Repeater,

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

Результирующий Row (Column соответственно) может быть заключен в Flickable который обеспечивает фактическую способность стряхивать.

Я нашел его в Qt Doc: https://doc.qt.io/qt-5/qml-qtquick-listview.html У меня работает :)

Другие вопросы по тегам