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

时间:2017-02-01 23:01:03

标签: qt qml

Qt QML有ListModel可用于表示列表数据。它提供了许多方法来向列表中添加元素,但我可以找到的唯一方法来检索元素是期望索引的get()方法。

我想检查我的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({name:" Banana"})之类的方法可以找到名称为" Banana"的元素。并归还他们?

1 个答案:

答案 0 :(得分:6)

您必须迭代并检查列表元素。

如果您要执行不同的搜索,编写一个函数是个好主意,您可以将搜索条件作为仿​​函数传递:

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" })

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