我有一个XmlListModel,可以从网络服务器获取数据,效果很好。
但是,我想在CLComboBox中使用它(来自Colibri库)。
如果我将参数ListModel设置为我的XmlListModel,我得到:
Non-existent attached object
ListModel:xmlModel13
但确实存在;因为ListView对象可以使用相同的模型。
在我看来,CLComboBox只接受ListModel,所以有没有办法轻松地将XmlListModel转换为ListModel?
答案 0 :(得分:4)
您无法将QDeclarativeXmlListModel
投射到QDeclarativeListModel
,因为它们都指向QListModelInterface
的后代。
在我看来,Colibri应该使用QObject
(variant
属性)而不是QDeclarativeListModel
。并监听标准的基于项目的模型信号,例如我相信可以通过一些努力来解决。
如果你不愿意为Colibri做贡献,我认为@ sabbour的答案是最好的选择。考虑一下简单的例子:
XmlListModel {
id: xmlModel
source: "http://forumcinemas.lv/rus/xml/Events/"
query: "/Events/Event"
XmlRole { name: "label"; query: "Title/string()" }
XmlRole { name: "value"; query: "ID/number()"; isKey: true }
onStatusChanged: {
if (status == XmlListModel.Ready) {
for (var i=0; i<count; i++) {
var item = get(i)
list_model.append({label: item.label,
value: item.value,
selected: false})
}
// CLComboBox doesnt seem to listen for model updates
combo_box.items = list_model
}
}
}
ListModel {
id: list_model
}
CLComboBox {
id: combo_box
// ...
}
答案 1 :(得分:1)
您可以使用循环填充CLComboBox内的ListModel。