QML视图中的Foreach委托

VAL*_*OD9 2 qt qml qtquick2

是否可以遍历a ListViewGridView使用foreach或类似功能的委托?

Cin*_*its 5

虽然西蒙的回答是一个最佳实践,回答问题实际被要求需要遍历childrenListViewcontentItem,像这样:

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)
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用objectName或委托Item的任何其他属性进行过滤。


Sim*_*rta 3

您确定要迭代委托吗?在大多数情况下,您希望迭代模型,因为即使ListView您的模型有 100 个条目,也可能只有少数委托。这是因为委托在移出可见区域时会被重新填充。

您需要一个具有函数的模型,例如at()返回给定位置的模型元素。比你可以做类似的事情

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;
                }
            }
        }
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,“Treeview”将在一个月左右的时间内随 Qt 5.5 一起推出。如果您想尝试一下,Alpha 版本已经可用。 (2认同)