2017-02-01 57 views
0

Qt QML有一個ListModel可以用來表示列表數據。它提供了許多用於向列表添加元素的方法,但是我可以找到的用於檢索元素的唯一方法是需要索引的get()方法。如何在qml中的ListModel中查找特定的ListElement?

我想檢查我的ListModel是否包含特定的元素?有沒有辦法使用鍵和值來接收ListElement對象?

例如connsider這個名單:

ListModel { 
    id: fruitModel 

    ListElement { 
     name: "Apple" 
     cost: 2.45 
    } 
    ListElement { 
     name: "Orange" 
     cost: 3.25 
    } 
    ListElement { 
     name: "Banana" 
     cost: 1.95 
    } 
} 

有沒有一種方法,如fruitModel.get({名稱:「香蕉」}),將找到一個名爲「香蕉」的元素,並返回他們?

+0

類似的東西:'用於(VAR I = 0;我 AlexanderVX

回答

1

您將不得不迭代並檢查列表元素。

這是寫,如果你將要執行不同的搜索,在那裏你可以通過搜索條件爲仿函數是一個好主意:

function find(model, criteria) { 
    for(var i = 0; i < model.count; ++i) if (criteria(model.get(i))) return model.get(i) 
    return null 
} 

,你可以使用這樣的,找到一個與"Banana"名稱項目:

find(fruitModel, function(item) { return item.name === "Banana" }) 

如果多命中是可能的,你應該回報的項目,而不是單個項目的數組。

+0

但是這種方法只返回一個元素,不是全部。 – QtRoS

+0

@QtRoS - 閱讀答案的最後一段。 OP是關於一個特定的元素,而不是特定的元素。修改代碼以返回一系列匹配是很簡單的。 – dtech

+0

我不認爲這對於一個在原問題中提出更簡單解決方案的人來說是微不足道的。無論如何,返回一系列物品是一個非常糟糕的主意 - 如果他將它們存儲在某個地方呢? QML運行庫說,存儲由model.get()返回的引用是不安全的。所以在我看來,簡單的循環將解決他的問題。在更高級的場景中,他可能會考慮使用模型項目的副本。 – QtRoS

相關問題