从嵌套模型填充 QML ListModel
Fill QML ListModel from nested models
我有以下 C++ 模型结构:
Manager // QAbstractListModel
↪ Slot // QAbstractListModel
↪ Processor // QAbstractListModel
↪ name // Q_PROPERTY
我在实例化时只传递了对 QML 的 Manager
引用。我需要用 Processor
名称填充 ComboBox
,但我不知道如何填充这个嵌套结构。
这是我计划使用的代码(但现在无法使用):
ComboBox {
model: Repeater {
model: manager
delegate: Repeater {
model: slot
delegate:Repeater {
model: processor
delegate: ListModel {
ListElement {text: name}
}
}
}
}
}
我知道委托用于指定如何显示数据(这就是 ComboBox
没有这个的原因),但我不知道如何正确实现它。
所以我的问题是:如何递归地填充一个ListModel
?
向您的 QAbstractListModel 角色添加 returns 另一个 QAbstractListModel。
我提出了以下递归填充 ComboBox 的解决方案:
ComboBox {
id: comboBox
model: ListModel {}
textRole: "processorName"
Repeater {
model: manager
delegate: Repeater {
model: slot
delegate: Repeater {
model: processor
Component.onCompleted:
comboBox.model.append(
{"processorName": model.Processor.Name}
);
}
}
}
}
我有以下 C++ 模型结构:
Manager // QAbstractListModel
↪ Slot // QAbstractListModel
↪ Processor // QAbstractListModel
↪ name // Q_PROPERTY
我在实例化时只传递了对 QML 的 Manager
引用。我需要用 Processor
名称填充 ComboBox
,但我不知道如何填充这个嵌套结构。
这是我计划使用的代码(但现在无法使用):
ComboBox {
model: Repeater {
model: manager
delegate: Repeater {
model: slot
delegate:Repeater {
model: processor
delegate: ListModel {
ListElement {text: name}
}
}
}
}
}
我知道委托用于指定如何显示数据(这就是 ComboBox
没有这个的原因),但我不知道如何正确实现它。
所以我的问题是:如何递归地填充一个ListModel
?
向您的 QAbstractListModel 角色添加 returns 另一个 QAbstractListModel。
我提出了以下递归填充 ComboBox 的解决方案:
ComboBox {
id: comboBox
model: ListModel {}
textRole: "processorName"
Repeater {
model: manager
delegate: Repeater {
model: slot
delegate: Repeater {
model: processor
Component.onCompleted:
comboBox.model.append(
{"processorName": model.Processor.Name}
);
}
}
}
}