如何在 QML 中显示二维数组的值?

Posted

技术标签:

【中文标题】如何在 QML 中显示二维数组的值?【英文标题】:How to display values of 2d array in QML? 【发布时间】:2017-04-16 18:50:31 【问题描述】:

所以我在我的 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 运行时,数组的值会发生变化。

我想在表格中显示这个二维数组的值,并在它们发生更改时更新它们,此外还有一些影响数组所在行的值的操作按钮。

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

【问题讨论】:

doc.qt.io/qt-5/qtquick-modelviewsdata-modelview.html 【参考方案1】:

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

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

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

模型可以像上面那样以声明方式填充,也可以强制填充:

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

您还有通常的索引访问、属性访问等,只需scroll through the doc 即可了解接口。

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

【讨论】:

非常感谢!那么我可以使用for 来填充ListModel 任意次数,而不必分别声明每个ListElement,对吧? 是的,您可以以声明方式或命令方式(如循环)填充模型。 非常感谢!

以上是关于如何在 QML 中显示二维数组的值?的主要内容,如果未能解决你的问题,请参考以下文章

js如何定义二维数组,一维的key为动态值。就是要处理二级菜单显示。

VC中如何将一个二维数组的值赋给另一个二维数组?只能用一行。

C语言 如何将一个二维数组的值全部替换成另一个二维数组

C++中如何在一个二维数组中查找某个值

在opencv中,如何将二维数组转化为一副图像进行显示?

如何将二维数组中的值与 GoLang 中的一维数组中的值进行比较?