我有一堆名为&#34; config_1.xml&#34;,&#34; config_2.xml&#34;,&#34; config_3.xml&#34;等的xml文件。< / p>
基本上,我需要从第一个循环到最后一个,在SAME XmlListModel中附加所有&#34; id&#34;我在每个xml文件的查询context / info /参数中找到。
因此,一旦阅读完成,我将获得整个id(s)列表。
我尝试过:
property int myIterator: 1
Repeater {
model: 10 //10 is just an example. I have this number in my code by other functions.
XmlListModel {
id: myModel
source: "qrc:/ConfigFiles/config_" + myIterator + ".xml" // <---- THIS IS THE PROPERTY I NEED TO PARAMETRIZE!!!
query: "context/info/parameters"
XmlRole { name: "myId"; query: "id/number()" }
onCountChanged: { ++myIterator; }
}
}
onMyIteratorChanged: {
if (myIterator> 10)
for(var i = 0; i<myModel.count; i++) // myModel.count should be equal to 10!!!
console.log("id: " + myModel.get(i).myId);
}
但是,使用此代码,应用程序崩溃。 我该如何解决?
我还考虑过将每次迭代时存储在myModel中的所有信息传输到ListModel(其中appen()通过文档很容易)的想法。但我仍然不知道如何调用XmlListModel n次......
谢谢!! : - )
答案 0 :(得分:2)
要根据模型创建多个XmlListModel
,您无法使用Repeater
,因为XmlListModel
不是Item
。您必须将Instantiator
用于普通QtObject
。
与Repeater
类似,您可以使用modelData
(或index
访问代理中的模型数据,因为我们使用整数,所以它们在这里相同作为模特)。
如果您想迭代所有模型,可以使用count
和objectAt()
进行迭代:
Instantiator {
id: instantiator
model: 10
delegate: XmlListModel {
source: "qrc:/ConfigFiles/config_" + (modelData + 1) + ".xml"
query: "context/info/parameters"
XmlRole { name: "myId"; query: "id/number()" }
}
Component.onCompleted: {
for (var i = 0; i < instantiator.count; i++) {
var xmlModel = instantiator.objectAt(i);
for (var j = 0; i < xmlModel.count; j++)
console.log("id: " + xmlModel.get(j).myId);
}
}