如何在qml中的ListModel中找到特定的ListElement?

Ara*_*ras 3 qt qml

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”的元素并返回它们?

dte*_*ech 7

您将不得不迭代并检查列表元素。

如果要执行不同的搜索,则最好编写一个函数,在该函数中可以将搜索条件作为函子传递:

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)

如果可能有多个匹配,则应返回一个项目数组,而不是单个项目。

  • 我不明白您挑剔的原因,如果您有更好的答案,那就去解决。显然,如果先引用一个对象然后再删除该对象,那将是一段糟糕的时光。这并不意味着您永远不应该使用模型项引用,而只是意味着不要愚蠢。最后,您可以轻松地对解决方案进行修改,使其还包括函子,该函子将对每个匹配进行处理而无需返回任何内容。最后,如果您打算对模型项进行更改,则副本对您没有任何好处。 (2认同)