Sto tentando di creare un componente QML riutilizzabile che ospita internamente un GridView. Ogni elemento in GridView ha un insieme di comportamenti (principalmente di visualizzazione e roba basata sul mouse) che è comune in tutta l'applicazione. Tuttavia, ciò che viene visualizzato all'interno degli elementi di GridView cambia a seconda del caso d'uso. (Ovvero, lo stesso Componente incapsulato per un GridView, ma altrove nell'applicazione potrebbe usare un Componente diverso.)QML: come posso passare le proprietà del modello a un delegato caricato all'interno di un delegato GridView (o ListView)?
Quindi, quello che vorrei fare è avere a ogni invocazione un delegato che viene aggiunto ad ogni elemento nel GridView, che è già un delegato. In altre parole, qualcosa di simile:
MyGrid.qml
import QtQuick 1.1
Rectangle {
id: myGrid
objectName: "myGrid"
property Component internalDelegate
property variant internalModel
GridView {
anchors.fill: parent
delegate: Row {
Loader {
sourceComponent: myGrid.internalDelegate
}
}
model: parent.internalModel
}
}
L'idea è che il caricatore all'interno del delegato GridView carica il delegato fornito dall'utente, che sarebbe simile a questa:
Main.qml
import QtQuick 1.1
Rectangle {
anchors.fill: parent
width: 300
height: 200
MyGrid {
anchors.fill: parent
internalDelegate: Text {
text: name
}
internalModel: ListModel {
ListElement {
name: "a"
}
ListElement {
name: "b"
}
}
}
}
Tuttavia, questo non lo fa lavoro. QML riporta che "name" è una variabile sconosciuta all'interno dell'elemento Text. Se sostituisco la variabile name con una stringa (ad esempio "ciao"), funziona come previsto.
La mia domanda è, come posso passare la variabile "nome" a internalDelegate, o meglio ancora, rendere disponibile l'intero modello in modo che internalDelegate possa accedervi tutti (poiché anche il chiamante sta definendo il modello).
Una domanda secondaria è: c'è un modo migliore per farlo?
Finii usando la tua tecnica per il mio progetto. Meno codice è migliore e mi piace come rimuove completamente la necessità del componente di bind. Grazie! –