首页 文章

在QML视图中的Foreach委托

提问于
浏览
2

是否可以使用 foreach 或类似函数迭代 ListViewGridView 的委托?

2 回答

  • 2

    虽然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或委托Item的任何其他属性进行过滤 .

  • 4

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

相关问题