Прокрутка ListView в столбце в QML

1

Ниже код работает отлично (спасибо Sylvain), только при прокрутке верхняя строка из ListView перезаписывает buttonRow. Есть идеи ? -

import QtQuick 2.0
import Ubuntu.Components 0.1

MainView {
width: units.gu(60)
height: units.gu(60)

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

Page {
    id: test

    Column {
        spacing: units.gu(1)
        id: pageLayout
        anchors {
            margins: units.gu(2)
            fill: parent
        }

        Row {
            id: buttonRow
            spacing: units.gu(1)
            Button {
                objectName: "button1"
                color: "white"
                text: i18n.tr("Help")
            }
            Button {
                objectName: "button2"
                color: "black"
                text: i18n.tr("Search")
            }
        }

        Item {
            anchors.top: buttonRow.bottom
            ListView {
                id: list
                width: units.gu(18)
                height: units.gu(3)
                model: fruitModel
                boundsBehavior: Flickable.StopAtBounds
                delegate: Row {
                    Text { text: "Fruit: " + name }
                    Text { text: "Cost: $" + cost }
                }
            }
            Scrollbar {
                flickableItem: list
                align: Qt.AlignTrailing
            }
        }
    }
}
}
    
задан user262898 12.04.2014 в 21:01
источник

1 ответ

1

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

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

Проецируемый автоматически не обрезает содержимое. Если он не используется в качестве полноэкранного элемента, вам следует рассмотреть возможность установки свойства clip в true .

Итак, пример кода выглядит следующим образом:

import QtQuick 2.0
import Ubuntu.Components 0.1

MainView {
    width: units.gu(60)
    height: units.gu(60)

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

    Page {
        id: test

        Column {
            spacing: units.gu(1)
            id: pageLayout
            anchors {
                margins: units.gu(2)
                fill: parent
            }

            Row {
                id: buttonRow
                spacing: units.gu(1)
                Button {
                    objectName: "button1"
                    color: "white"
                    text: i18n.tr("Help")
                }
                Button {
                    objectName: "button2"
                    color: "black"
                    text: i18n.tr("Search")
                }
            }

            Item {
                anchors.top: buttonRow.bottom
                ListView {
                    id: list
                    clip: true
                    width: units.gu(18)
                    height: units.gu(3)
                    model: fruitModel
                    boundsBehavior: Flickable.StopAtBounds
                    delegate: Row {
                        Text { text: "Fruit: " + name }
                        Text { text: "Cost: $" + cost }
                    }
                }
                Scrollbar {
                    flickableItem: list
                    align: Qt.AlignTrailing
                }
            }
        }
    }
}
    
ответ дан Sylvain Pineau 12.04.2014 в 22:05
источник