2017-04-16 464 views
0

所以我在我的qml的根元素中創建了一個屬性,並用JavaScript填充爲2d數組。我這樣做:如何在QML中顯示2d數組的值?

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。

+0

http://doc.qt.io/qt-5/qtquick-modelviewsdata-modelview.html –

回答

0

如果打算將數據可視化,平面陣列並不是理想的解決方案。 QML視圖可以使用數組作爲模型,但如果您想要反映內部更改,則效率低下。您必須強制更新整個視圖,重新創建所有視圖委託,而不是僅更新已更改的值,否則必須實現自己的機制來更新更改。

使用最簡單的事情將是一個ListModel元素,而不是實現屬性的數組(也是不好的想法),您可以實現它們作爲列表元素屬性:

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

該模型可以填充聲明如上,或命令式:

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

也有一般的索引訪問,訪問屬性等等,只是scroll through the doc拿到界面的想法。

這樣做的好處是您將在視圖中獲得高效的自動更新。因此,您只需設置一個視圖並實現一個委託,用於可視化和操作數據。

+0

非常感謝!那麼我可以使用'for'來多次填充'ListModel',而不必分別聲明每個'ListElement',對吧? –

+0

是的,您可以通過計劃或強制方式填充模型(如循環)。 – dtech

+0

非常感謝! –