ScrollView со смесью RowLayouts и ListView в QML - PullRequest
0 голосов
/ 03 апреля 2020

Мне нужно создать вид с полосой прокрутки с несколькими линиями, а в середине он должен быть динамически изменен. Итак, я создал конструкцию так:

ScrollView {
property int number: 1

id: scroll
anchors.fill: parent
clip : true

ColumnLayout {
    anchors.left: parent.left
    anchors.right: parent.right
    spacing: 20

    RowLayout {
        Label {
            color: enabled ? "#303030" : "#8a8a8a"
            font.weight: Font.Bold
            Layout.preferredWidth: scroll.width / 2
            Layout.minimumWidth: scroll.width / 2
            text: "Some text"
        }
    }

    ListView {
        id: listView1
        Layout.fillHeight: true
        Layout.fillWidth: true
        Layout.bottomMargin: 40
        spacing: 20
        interactive: false
        width: parent.width
        height: (number + 1) * 40

        delegate: Item {
            id: itemDelegate
            anchors.left: parent.left
            anchors.right: parent.right
            height: 40

            Button {
                anchors.fill: parent
                text: someText
            }
        }

        model: ListModel {
            id: listModel

            ListElement {
                someText: "first"
            }

        }
    }

    RowLayout {
        id: rowLayout2
        anchors.top: listView1.bottom

        Label {
            color: enabled ? "#303030" : "#8a8a8a"
            font.weight: Font.Bold
            Layout.preferredWidth: scroll.width / 2
            Layout.minimumWidth: scroll.width / 2
            text: "Some text"
        }
    }


    RowLayout {
        anchors.top: rowLayout2.bottom

        Button {
            id: button1
            text: qsTr("Create")
            width: (parent.width / 5)*2
            height: 50

            onClicked: {
                listModel.append({someText: "Button " + (++number)})

            }
        }

        Button {
            id: button2
            text: qsTr("Delete")
            width: (parent.width / 5)*2
            height: 50

            onClicked: {
                listModel.remove(textIndex.text)
                --number;
            }
        }
    }

}

}

Смысл приведенного выше кода заключается в том, что у меня есть ScrollView и ColumnLayout внутри. ColumnLayout имеет RowLayout №1, затем ListView, который можно динамически изменять, нажимая кнопки «Создать» и «Удалить», и у меня есть RowLayout №2 после ListView и RowLayout №3 с кнопками для изменения размера ниже RowLayout №2. Итак, суть в том, что когда я добавляю строку в ListView, RowLayout №2 и RowLayout №3 должны автоматически перемещаться вниз, когда я удаляю строку, они должны быть перемещены вверх. И, тогда что-то за пределами экрана, должна появиться полоса прокрутки. Итак, у меня есть 2 проблемы:

  1. Полоса прокрутки не появляется, когда много линий и они находятся за пределами экрана.
  2. "QML RowLayout: Обнаружены привязки на элемент, управляемый макетом. Это неопределенное поведение; вместо этого используйте Layout.alignment. " - эта ошибка на RowLayout №2 и RowLayout №3.

Спасибо за помощь!

...