QML 视图中的 Foreach 委托

Posted

技术标签:

【中文标题】QML 视图中的 Foreach 委托【英文标题】:Foreach delegate in QML view 【发布时间】:2015-03-29 13:17:44 【问题描述】:

是否可以使用foreach 或类似函数遍历ListViewGridView 的代表?

【问题讨论】:

【参考方案1】:

虽然 Simon 的回答是最佳实践,但要回答所提出的实际问题,您需要像这样遍历 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)

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

【讨论】:

【参考方案2】:

您确定要迭代委托吗?在大多数情况下,您希望迭代模型,因为在 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;
                
            
        
    

    // ...

【讨论】:

我正在尝试使用ListViews 在ListView 中的组合来实现树视图。我希望有可能隐藏和显示一些根的列表。我还需要Show/Hide all button 我会避免这样做,因为让嵌套的ListViews 正常工作并非易事。确认Roll your own Qt Quick TreeView 和页面末尾的演示文稿。或this。如果您有信心完成此类任务,请继续提出更具体的问题。 顺便说一句。 Treeview 将在一个月左右的时间内与 Qt 5.5 一起提供。如果您想尝试一下,Alpha 版本已经可用。

以上是关于QML 视图中的 Foreach 委托的主要内容,如果未能解决你的问题,请参考以下文章

如何从QML中的GridView或ListView获取实例化的委托组件

QML中的模型/视图 十二

for和foreace的区别

从 C++ 更改 QML Listview 委托

如何在 QML 中创建动态委托?

如何从 C++ 访问 QML ListView 委托项目?