QML ListView wurde von JavaScript ausgefüllt
-
26-10-2019 - |
Frage
Ich habe gerade festgestellt, dass (nach einigen QML -Bugreports) JSON -Delegate für ListView fehlt. Ich habe also zwei Auswahlmöglichkeiten, fülle es mit einem Modell aus, das in JavaScript oder C ++ erstellt wurde
Insbesondere muss ich .json -Daten von vordefinierten URL herunterladen und an ListView analysieren.
Ich habe versucht, Objektarray in JavaScript zu erstellen und Assoc -Array auf ListView als Modell zu drücken, aber es ist fehlgeschlagen. Egal wie ich den Code geändert habe.
Gibt es also nur eine C ++ - Lösung oder ich kann das ListView -Modell mit JavaScript erstellen?
Vielen Dank
Code, den ich ausprobiert habe:
return [{"name":"value"}]
return {"name":"value"}
return [["name","value"]]
Das Problem war immer: ReferenceError: Can't find variable: name
Lösung
Aufgrund von Ratschlägen von Mouli@irc.freenode.net#qt tun Sie dies:
Datei: Gui.qml
import "script.js" as Script
model: ListModel { id: list_model_id }
Datei: script.js
function makeList(id){
id.append({"name":"value1"});
id.append({"name":"value2"});
}
Anruf:
Script.makeList(list_model_id)
Andere Tipps
Es mag etwas spät sein, aber mit QT 5.5 (vielleicht früher, aber Testet mit 5.5) können Sie Folgendes tun:
Nehmen wir an, Sie haben ein Array wie folgt:
var dataArray = [{"name":"A"},{"name":"B"},{"name":"C"}]
Der Code in QML zur Anzeige dieses Modells:
ListView {
model: dataArray //the array from above
delegate: Label {
text: dataArray[index].name
}
}
Das index
wird für den Delegierten bereitgestellt. Es ist der Index für das aktuelle Element im Modell. Sehen ListView -Delegate -Eigenschaft für mehr Informationen.
Es ist viel einfacher zu bedienen Component.onCompleted
:
model: ListModel {
Component.onCompleted: {
append({"name": "A"});
append({"name": "B"});
append({"name": "C"});
}
}