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

War es hilfreich?

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"});
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top