QML ListView riempito da JavaScript
-
26-10-2019 - |
Domanda
Ho appena realizzato che (secondo alcuni QML Bugreport) v'è JSON delegato per ListView mancanti. Così ho due scelte, riempirlo per modello realizzato in Javascript o C ++
Specialmente Ho bisogno di scaricare i dati da .json predefinito URL e li analizza per ListView.
Ho cercato di creare array di oggetti in Javascript e spingere serie Assoc a ListView come modello, ma è venuto a mancare. Non importa quanto ho modificato il codice.
Così, c'è solo C ++ soluzione o posso fare il modello ListView da JavaScript?
Grazie
Codice ho provato:
return [{"name":"value"}]
return {"name":"value"}
return [["name","value"]]
Il problema è sempre stato: ReferenceError: Can't find variable: name
Soluzione
A causa di consigliare dai mouli@irc.freenode.net#qt fare questo:
file: gui.qml
import "script.js" as Script
model: ListModel { id: list_model_id }
di file: script.js
function makeList(id){
id.append({"name":"value1"});
id.append({"name":"value2"});
}
chiamata:
Script.makeList(list_model_id)
Altri suggerimenti
Può essere un po 'in ritardo, ma con Qt 5.5 (forse prima, ma testet con 5.5) è possibile effettuare le seguenti operazioni:
lascia supporre che avete ottenuto un array come questo:
var dataArray = [{"name":"A"},{"name":"B"},{"name":"C"}]
Il codice in QML per visualizzare questo modello:
ListView {
model: dataArray //the array from above
delegate: Label {
text: dataArray[index].name
}
}
Il index
sarà fornito per il delegato. E 'l'indice per l'elemento corrente all'interno del modello. Vedere ListView proprietà delegato per ulteriori informazioni.
E 'molto più facile da usare Component.onCompleted
:
model: ListModel {
Component.onCompleted: {
append({"name": "A"});
append({"name": "B"});
append({"name": "C"});
}
}