是否可以使用 foreach
或类似的函数来遍历 ListView
或 GridView
的委托?
虽然Simon的回答是最佳实践,但要回答实际提出的问题,你需要像这样迭代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或委托项的任何其他属性进行过滤。
您确定要迭代委托吗?在大多数情况下,您应该迭代模型,因为在 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
的组合来实现树形视图。我希望能够隐藏和显示某些根节点的列表,并且我还需要一个“显示/隐藏所有”按钮。 - VALOD9ListView
很难正常工作。可以参考自己编写Qt Quick TreeView和页面末尾的演示文稿,或者这个。如果你有信心解决这种任务,请继续提出更具体的问题。 - Simon WartaTreeview
将在一个月左右的时间内作为 Qt 5.5 的一部分发布。如果您想尝试,Alpha 版本已经可以使用了。 - BaCaRoZzo