Qt从文件中读取QML数据

时间:2017-06-25 13:13:06

标签: qt file model

所以我有 data.txt 这样的数据:

    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"; }
    [...]

我需要将此数据添加到 Data.qml ,就像那样

 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"; }
    [...]

     }
}

怎么做?

1 个答案:

答案 0 :(得分:1)

作为介绍,通常首选保持数据格式的通用性,而不是QML代码。 QML适用于GUI,如果您希望保持代码的通用性和可维护性,则避免混合应用程序逻辑和GUI代码非常重要。您可以使用JSON格式,并从C ++加载它,或者如果您仍然从QML加载它,您可以直接使用JSON.parse javascript函数。

话虽这么说,你可以将你的QML模型放在一个单独的.qml文件中,例如:

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"; }
 }

然后使用Qt.createComponent()方法创建一个组件,然后使用该方法使用该对象:

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
    }
}

加载后,您的模型将可用。