如何在QML中显示2d数组的值?

时间:2017-04-16 18:50:32

标签: javascript arrays qt qml

所以我在qml的根元素中创建了一个属性,并用JavaScript作为二维数组填充它。我是这样做的:

property var cars: {

    var carList = new Array(root.numberOfCars)

    for (var i=0;i<root.numberOfCars;i++) {

        var carProperties = new Array(numberOfCarProperties);

        carProperties[root.currentStation] = -1;
        carProperties[root.score] = 100;
        carProperties[root.numberOfErrors] = 0;
        carProperties[root.hasProblem] = false;
        carProperties[root.errorScore] = 0;
        carProperties[root.finished] = false;

        carList[i] = carProperties;
    }
    return carList;
}

当程序通过JavaScript运行时,数组的值将会改变。

我希望在表中显示这个2d数组的值,并在它们被更改时更新它们,此外还有一些操作按钮会影响数组在其自己的行上的值。< / p>

我在QML和编程方面只是一个菜鸟,所以如果这是一个非常基本的问题,请告诉我在哪里可以了解更多,因为我在网上找到的资源很少,无法学习QML。 / p>

1 个答案:

答案 0 :(得分:0)

如果您打算可视化数据,则普通数组不是理想的解决方案。 QML视图可以使用数组作为模型,但如果要反映内部更改,则效率很低。您必须强制更新整个视图,重新创建所有视图委托,而不是仅更新更改的值,或者您必须实现自己的机制来更新更改。

最简单的使用方法是ListModel元素,而不是将属性实现为数组(无论如何都是坏主意),您可以将它们实现为列表元素属性:

ListModel {
    id: carList 
    ListElement {
        currentStation: -1
        score: 100
        numberOfErrors: 0
        // ...
    }
    ListElement {
        // ...
    }
}

模型可以如上所述填充声明,或者命令性地填充:

carList.append({"currentStation": -1, "score": 100, ...})

您还可以使用常规的索引访问权限,属性访问权等,只需scroll through the doc即可了解界面。

这样做的好处是您可以在视图中获得高效的自动更新。因此,您只需设置一个视图并实现一个委托,该委托将用于可视化和操作数据。