在QML视图中的Foreach委托

8

是否可以使用 foreach 或类似的函数来遍历 ListViewGridView 的委托?

2个回答

15

虽然Simon的回答是最佳实践,但要回答实际提出的问题,你需要像这样迭代ListViewcontentItem子项:

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

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


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

    // ...
}

1
我正在尝试使用ListView的组合来实现树形视图。我希望能够隐藏和显示某些根节点的列表,并且我还需要一个“显示/隐藏所有”按钮。 - VALOD9
我会避免这样做,因为嵌套的ListView很难正常工作。可以参考自己编写Qt Quick TreeView和页面末尾的演示文稿,或者这个。如果你有信心解决这种任务,请继续提出更具体的问题。 - Simon Warta
2
顺便提一下,Treeview 将在一个月左右的时间内作为 Qt 5.5 的一部分发布。如果您想尝试,Alpha 版本已经可以使用了。 - BaCaRoZzo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接