Le code ci-dessous fonctionne correctement (merci à Sylvain), mais uniquement lors du défilement, la ligne supérieure de ListView remplace le bouton Ligne. Une idée ? -
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
}
}
}
}
}
L'élément Flickable place ses enfants sur une surface qui peut être déplacée et déplacée, ce qui entraîne le défilement de la vue sur les éléments enfants. Ce comportement constitue la base des éléments conçus pour afficher un grand nombre d'éléments enfants, tels que ListView et GridView.
Dans les interfaces utilisateur traditionnelles, il est possible de faire défiler les vues à l'aide de commandes standard, telles que les barres de défilement et les boutons fléchés. Dans certaines situations, il est également possible de faire glisser la vue directement en maintenant enfoncé un bouton de la souris tout en déplaçant le curseur. Dans les interfaces utilisateur tactiles, cette action de glissement est souvent complétée par une action de défilement, le défilement se poursuivant une fois que l'utilisateur a cessé de toucher la vue.
Flickable ne coupe pas automatiquement son contenu. S'il n'est pas utilisé en tant qu'élément plein écran, vous devez définir la propriété du clip sur true
.
Ainsi, l'exemple de code ressemble maintenant à ceci:
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
}
}
}
}
}