1

我有一个从网络服务器获取数据的 XmlListModel,效果很好。

但是,我想在 CLComboBox (来自 Colibri 库)中使用它。

如果我将参数 ListModel 设置为我的 XmlListModel 我得到:

Non-existent attached object 
         ListModel:xmlModel13

但它确实存在;因为 ListView 对象可以使用完全相同的模型。

在我看来,CLComboBox 只接受 ListModel,那么有什么方法可以轻松地将 XmlListModel 转换为 ListModel?

4

2 回答 2

4

您不能QDeclarativeXmlListModel转换为,QDeclarativeListModel因为它们都是QListModelInterface.

在我看来,Colibri 应该使用QObject( variantproperty) 而不是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
    // ...
}
于 2012-05-28T19:19:00.250 回答
1

您可以使用循环填充 CLComboBox 内的 ListModel。

于 2012-05-28T10:40:08.873 回答