2017-06-25 1 views
0

Also ich habe data.txt, wo die Daten wie folgt aus:Qt lesen QML Daten aus der Datei

ListElement{ longitude: "0"; latitude: "0"; height: "-700.114"; } 
    ListElement{ longitude: "0"; latitude: "1"; height: "-698.214"; } 
    ListElement{ longitude: "0"; latitude: "2"; height: "-695.955"; } 
    ListElement{ longitude: "0"; latitude: "3"; height: "-706.116"; } 
    [...] 

und ich brauche diese Daten zu Data.qml hinzuzufügen wie das

import QtQuick 2.1 

Item { 
    property alias model: dataModel 


//! [0] 

ListModel{ 
    id: dataModel 
    ListElement{ longitude: "0"; latitude: "0"; height: "-700.114"; } 
    ListElement{ longitude: "0"; latitude: "1"; height: "-698.214"; } 
    ListElement{ longitude: "0"; latitude: "2"; height: "-695.955"; } 
    ListElement{ longitude: "0"; latitude: "3"; height: "-706.116"; } 
    [...] 

    } 
} 

Wie geht das?

Antwort

1

Als Einführung wird es in der Regel bevorzugt, Ihr Datenformat anstelle von QML-Code generisch zu halten. QML ist für GUI gedacht, und es ist wichtig, Anwendungslogik und GUI-Code nicht zu mischen, wenn Sie Ihren Code generisch und wartbar halten wollen. Sie können zum Beispiel das JSON-Format verwenden und es aus C++ laden, oder wenn Sie es noch von QML laden, können Sie die JavaScript-Funktion JSON.parse direkt verwenden.

aber sagen, dass können Sie Ihr QML-Modell in einer getrennten .qml Datei, zum Beispiel setzen:

DataModel.qml

ListModel { 
    ListElement{ longitude: "0"; latitude: "0"; height: "-700.114"; } 
    ListElement{ longitude: "0"; latitude: "1"; height: "-698.214"; } 
    ListElement{ longitude: "0"; latitude: "2"; height: "-695.955"; } 
    ListElement{ longitude: "0"; latitude: "3"; height: "-706.116"; } 
} 

Und dann die Qt.createComponent() Methode verwenden, um eine Komponente zu erstellen und dann die Objekt, das Sie so verwenden könnten:

function loadModel() { 
    // Create the component 
    var component = Qt.createComponent("DataModel.qml"); 

    if (component.status == Component.Ready) { 
     // Instantiate the object given a parent 
     var model = component.createObject(qmlParentId); 

     // Assign the newly created object to your property 
     root.model = model 
    } 
} 

Sobald geladen, wird Ihr Modell verfügbar sein.

+0

aber ich brauche den Text aus der TXT-Datei zu ListModel {} – icegas

+0

Dann ist die nächste "Qt.createQmlObject" von QML, die eine Zeichenfolge dauert. Aber es gibt nicht so etwas wie "den Text aus der TXT-Datei einfügen". Und außer wenn Sie wirklich gute Gründe haben (was Sie vielleicht haben), scheint mir dieser Ansatz fehlerhaft zu sein. –