我在C ++中有一个分层(嵌套)QAbstractListModel
,即Outer
模型的项是Inner
模型的实例,类Inner
的项是一些QObject
个派生Data
个实例。 Outer
具有submodel
角色,可以访问Inner
个项目。
相应的QML代码在Repeater
内嵌套ListView
。
ListView
正确迭代Inner
类型的项目,我可以检索Inner
代表中ListView
个模型实例的项目数。
我遇到的问题是Repeater
不会迭代Data
模型的Inner
个实例。
在C ++模型的方法中使用调试打印输出我看到了
rowCount()
但Inner
个实例
data()
。Inner
QML代码如下所示:
import QtQuick 2.0
import QtQuick.Controls 1.3
import NestedModels 1.0 as Models
ScrollView {
width: 1980; height:600
Component {
id: inner
Item {
Text {
x:1000; font.pointSize: 9
text: "inner " + model.name
}
}
}
Component {
id: outer
Item {
height: 40
property var innerModel: model.submodel
Text {
font.pointSize: 9
text: "outer " + model.objectName
+ ": inner " + innerModel
}
Repeater {
model: innerModel
delegate: inner
}
}
}
ListView {
Models.OuterModel { id: outerModel }
model: outerModel
delegate: outer
Text {
x: 200; y: 400; font.pointSize: 9
text: outerModel.objectName + ": " + outerModel.count + " rows. " + outerModel.getItem(0)
}
}
}
答案 0 :(得分:1)
尝试使用单独的qml文件OuterDelegate.qml 我遇到了同样的问题,问题是您将内部模型错误地传递给中继器