如何为 ListView
分配不同的模型, 在 Repeater
内?
我做了一个草图(我的实际项目要大得多):
Column {
Repeater {
model: ["Line1","Line2","Line3","Line4"]
Rectangle {
ListView {
model: ???
delegate: Rectangle {
Text {
text: somemodelproperty
}
}
}
}
}
}
目前,我正在通过复制粘贴 10 个矩形来解决这个问题,每个矩形包含一个 ListView
.在 C++ 中,我实现了 10 QList<QObject*>
,并且每个列表都“有界”到 ListView
通过做
QQmlContext * example = engine.rootContext();
example->setContextProperty(modelname,QVariant::fromValue(listobject));
我很确定有一种更智能的方法可以做到这一点,但我几天前才开始使用 QML,但找不到解决方案。
最佳答案
有一个问题,您不能将 id
用作列表元素的值,也不能将列表模型嵌套在列表元素中,至少不能直接嵌套。
但是您可以像这样填充它:
Item {
id: models
ListModel {/*...*/}
ListModel {/*...*/}
//...
}
ListModel {
id: outerModel
}
function set() {
for (var i = 0; i < models.data.length; ++i) {
outerModel.append({"model": models.data[i] /* and other stuff */})
}
}
或者,如果您更喜欢使用 C++ 数据,您可以向列表中的每个元素添加一个 QObject*
“model”属性,并使用函数对其进行设置,如上例所示或使用您指定的内部模型的 id
。
再想一想,您可能想使用另一个名称而不是“model”,因为我无法想象 QML 会喜欢 model: model
更新:您可以尝试这样做(假设您的 10 个模型在 QML 中公开为 m1
- m10
)
property var subModels: [m1, m2, ... m10]
然后对于中继器委托(delegate)内的 ListView
,您可以:
ListView {
model: subModels[index]
// ...
}
然后假设您在转发器中有 10 个元素,每个 ListView 的模型将从具有适当元素索引的数组中选择。
关于c++ - Repeater 中的 QML ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29385552/