Qt QML具有一个ListModel,可用于表示列表数据。它提供了许多将元素添加到列表中的方法,但是我可以找到的用于检索元素的唯一方法是get()需要索引的方法。
我要检查ListModel是否包含特定元素,该怎么办?有没有一种方法可以使用键和值来接收ListElement对象?
例如,考虑以下列表:
ListModel {
id: fruitModel
ListElement {
name: "Apple"
cost: 2.45
}
ListElement {
name: "Orange"
cost: 3.25
}
ListElement {
name: "Banana"
cost: 1.95
}
}
Run Code Online (Sandbox Code Playgroud)
是否存在诸如fruitModel.get({name:“ Banana”})之类的方法来查找名称为“ Banana”的元素并返回它们?
您将不得不迭代并检查列表元素。
如果要执行不同的搜索,则最好编写一个函数,在该函数中可以将搜索条件作为函子传递:
function find(model, criteria) {
for(var i = 0; i < model.count; ++i) if (criteria(model.get(i))) return model.get(i)
return null
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用它来查找名称为的商品"Banana":
find(fruitModel, function(item) { return item.name === "Banana" })
Run Code Online (Sandbox Code Playgroud)
如果可能有多个匹配,则应返回一个项目数组,而不是单个项目。