Is it possible to iterate through the delegates of a ListView
or GridView
using foreach
or a similar function?
7
votes
2 Answers
13
votes
While Simon's answer is a best practice, to answer the actual question being asked you need to iterate over the children
of ListView
's contentItem
like so:
ListView {
id: list
model: mymodel
delegate: Text {
objectName: "text"
text: name + ": " + number
}
}
for(var child in list.contentItem.children) {
console.log(list.contentItem.children[child].objectName)
}
You can then filter using objectName or any other property of the delegate Item.
3
votes
Are you sure you want to iterate over delegates? In most cases you want to iterate over the model because in case of a ListView
there might be only a handful of delegates even if your model has 100 entries. This is because a delegate is re-filled when it moved out of the visible area.
You need a model that has a function like for example at()
which returns the model element for a given position. Than you can do something like
ListView {
// ...
function find(convId)
{
// count is a property of ListView that returns the number of elements
if (count > 0)
{
for (var i = 0; i < count; ++i)
{
// `model` is a property of ListView too
// it must have an at() metghod (or similar)
if (model.at(i)["id_"] === convId)
{
return i;
}
}
}
}
// ...
}