QML 视图中的 Foreach 委托
Posted
技术标签:
【中文标题】QML 视图中的 Foreach 委托【英文标题】:Foreach delegate in QML view 【发布时间】:2015-03-29 13:17:44 【问题描述】:是否可以使用foreach
或类似函数遍历ListView
或GridView
的代表?
【问题讨论】:
【参考方案1】:虽然 Simon 的回答是最佳实践,但要回答所提出的实际问题,您需要像这样遍历 children
的 ListView
的 contentItem
:
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;
// ...
【讨论】:
我正在尝试使用ListView
s 在ListView
中的组合来实现树视图。我希望有可能隐藏和显示一些根的列表。我还需要Show/Hide all button
。
我会避免这样做,因为让嵌套的ListView
s 正常工作并非易事。确认Roll your own Qt Quick TreeView 和页面末尾的演示文稿。或this。如果您有信心完成此类任务,请继续提出更具体的问题。
顺便说一句。 Treeview
将在一个月左右的时间内与 Qt 5.5 一起提供。如果您想尝试一下,Alpha 版本已经可用。以上是关于QML 视图中的 Foreach 委托的主要内容,如果未能解决你的问题,请参考以下文章