所以我在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>
答案 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即可了解界面。
这样做的好处是您可以在视图中获得高效的自动更新。因此,您只需设置一个视图并实现一个委托,该委托将用于可视化和操作数据。