>我有一个本地xml文件告诉我:
- 我的界面必须有多少"滑动"页面
- 对于任何页面,有多少行
- 对于任何行,有多少列(任何列都将包含一个标签和一个值,这取决于您在节点之间找到的属性(
这是一个模板:
<?xml version="1.0" encoding="utf-8"?>
<parameters version="2.0">
<page pageNum = "2">
<row colNum = "1">
<column>
<id>00001</id>
<name>parameterName</name>
<type>parameterType</type>
<value>parameterValue</value>
<min>0</min>
<max>100</max>
<step>1</step>
</column>
</row>
<row colNum = "2">
<column>
<id>00002</id>
<name>parameterName</name>
<type>parameterType</type>
<value>parameterValue</value>
<min>0</min>
<max>100</max>
<step>1</step>
</column>
<column>
<id>00003</id>
<name>parameterName</name>
<type>parameterType</type>
<value>parameterValue</value>
<min>0</min>
<max>100</max>
<step>1</step>
</column>
</row>
</page>
<page>
<!-- ... etc ... -->
</page>
</parameters>
经过一些研究,我发现在一些论坛上,XmlListModel不适合。考虑到我在Qt工作,我该怎么办?
在这里 https://lists.launchpad.net/ubuntu-phone/msg12284.html 我发现了一些有趣的东西,但是为了读取 xml 文件,使用了 XMLHttpRequest,我不能使用它,因为我的 xml 文件只是本地的!
有人可以帮助我吗?
非常感谢!
虽然这几乎可以肯定可以用XmlListModel
来完成(请参阅对问题的评论(,但这将是相当浪费的,因为模型的每个实例都需要执行所有解析和查询。
一个XmlListModel
将提供有多少页的输入
XmlListModel {
query: "/parameters/page"
}
然后,每个页面都有一个模型,用于提取该页面的行(未测试查询(
XmlListModel {
// pageNum is a property set on each page, e.g. via the model.index of the Repeater generating the pages
query: "/parameters/page[@pageNum=" + pageNum + "]/row"
XmlRole { name: "id"; query: "column/id/string()" }
// ... and so on
}
但是,我认为最好的方法是创建一个可以表示单个页面行的自定义QAbstractListModel
子类。
然后,具有该类型的列表属性的对象可以用作页面的模型,每个页面都使用其"行模型"。
解析只做一次,例如,使用QXmlStreamReader
来构建"行模型"列表并获取每个模型的内容。