GridLayout avec plusieurs délégués : propriété Layout avec des délégués dynamiques
Bonjour à tous,
J'ai besoin d'afficher une Gridlayout à partir d'un modèle précisant des sections et des attribut/valeur. Quand c'est un type Section, le délégué doit prendre 2 colonnes (Layout.columnsSpan :2), or que lorsque c'est un model attribut/valeur, l'attribut doit aller dans la première colonne et la valeur doit aller dans la seconde colonnes.
Voici ce que j'ai jusqu'ici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
ListModel {
id: model
ListElement {
type : "Section"; name: "Première section";
}
ListElement {
type : "Attribute"; name :"Attribut #1"; value : "Value de l'attribut #1"
}
}
Component {
id: sectionComponent
Rectangle {
Layout.columnSpan: 2 // Erreur
Layout.fillWidth: true // Erreur
Layout.fillHeight: true // Erreur
Text {
anchors.centerIn: parent
font.pointSize: 14
text: modelData.name
}
}
}
Component {
id: attributeComponent
Rectangle {
Layout.fillWidth: true // Erreur
Layout.fillHeight: true // Erreur
Text {
anchors.centerIn: parent
font.pointSize: 14
text: modelData.name
}
}
}
Component {
id: modelComponent
Loader {
sourceComponent: type == "Section" ? sectionComponent : attributeComponent
property variant modelData: mainRowCenterRightContentModel.get(index)
}
}
GridLayout {
id : gridLayout
anchors.fill: parent
columns: 2
rows: model.count
Repeater {
model: model
delegate: modelComponent
}
} |
Le problème c'est que le délégué chargé par le Loader perd la notion de Layout. Je sais que je pourrais retirer le Loader et utiliser utiliser le même délégué en cachant soit celui pour la section our celui poru les attributs, mais il se peut que la grille devienne plus complexe éventuellement. Donc, comment utiliser l'attribut Layout dans mon délégué dynamique ?
Merci