Dynamisch erstellen, das listmodel in QML
Wenn ich brauche zu jedem QML-Komponente in der Laufzeit, die ich verwenden kann, die Anleitung:
http://qt-project.org/doc/qt-5/qtqml-javascript-dynamicobjectcreation.html
also einfach anrufen Qt.createComponent und der Komponente.createObject
Aber ich konnte nicht herausfinden, wie die zu erstellen, die das listmodel zur Laufzeit? mit qml, nicht in c++.
Können Sie Fragen, warum ich es brauche. Also, ich habe einen verschachtelten das listmodel: es ist äußeren Modell, die Delegierten enthalten innere Modelle. Also, wenn ich rufe outer_model.append({}), die ich passieren muss neu erstellt das listmodel für innere Modell. Ich kann nicht die Verwendung von statisch definierten innere Modell in der äußeren delegieren, weil ich nicht den Zugang zu solchen Modell-Laufzeit. By the way, kann darauf zugegriffen werden irgendwie?
P. S. Vielleicht ist es völlig falsch, zu versuchen, verwalten von Modellen in javascript?
- Es gibt eine starke Schule des Denkens, sagt der Modelle verwaltet werden sollen in C++ und Javascript sollte gehalten werden, leicht, wirklich für die Verwaltung der Anzeigen nur. In meiner Erfahrung, es ist nichts falsch mit der Verwaltung der Modelle in Javascript, so lange, wie Ihr code ist gut strukturiert. Qt bietet keine Javascript-debugger, so können Sie nicht zu Schritt über den code oder inspizieren von Variablen. Sie verlassen sich auf einen old-school-Konsole.log() debug-Ausgaben, das macht es schwieriger, Fehler zu beheben oder die Pflege von Programmcode. Hoffentlich ändert sich das in zukünftigen Versionen von Qt Creator.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Ich bin ein JS-Entwickler, der schreibt QtQuick-Anwendungen und das ist, was ich versucht habe mit mehreren Lösungen.
Kurze Antwort zur Verwaltung von Modellen in JavaScript in QML ist, dass es ist ein Alptraum. Ich würde empfehlen, dass Sie schreiben Sie eine kleine sub-Klasse von QAbstractListModel, die intern verwendet QJsonArray als Datenquelle, so dass es es leichter macht zu verstehen, die Daten-Struktur in C++ als auch in seiner Nutzung innerhalb QML. Befolgen Sie die Anweisungen zum erstellen von QML-Typen aus C++ hier.
Wenn Sie wollen immer noch, es zu tun in JavaScript, ein anderer Ansatz ist der folgende:
Aber dies hat einige ernste memory-leak-Probleme nach der Verwendung gc()
Wenn Ihre primäre Sorge ist, dass ListModels innen ListModels, diesem folgenden einfachen was für mich funktioniert (es gibt eine implizite Typ-Konvertierung zwischen Arrays von Objekten und ListModels innen ListModels glaube ich)
Mache ich die Initialisierung so:
Sowie Aktualisierung der Daten:
Zugang fuction Modell: