XmlListModel
一、描述
要使用此元素,需要导入模块:
import QtQml.XmlListModel
XmlListModel 用于从 XML 数据创建只读模型。
二、使用示例
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<item>
<title>Qt 6.0.2 Released</title>
<link>https://www.qt.io/blog/qt-6.0.2-released</link>
<pubDate>Wed, 03 Mar 2021 12:40:43 GMT</pubDate>
</item>
<item>
<title>Qt 6.1 Beta Released</title>
<link>https://www.qt.io/blog/qt-6.1-beta-released</link>
<pubDate>Tue, 02 Mar 2021 13:05:47 GMT</pubDate>
</item>
<item>
<title>Qt Creator 4.14.1 released</title>
<link>https://www.qt.io/blog/qt-creator-4.14.1-released</link>
<pubDate>Wed, 24 Feb 2021 13:53:21 GMT</pubDate>
</item>
</channel>
</rss>
import QtQuick 2.12
import QtQuick.Window 2.0
import QtQml.XmlListModel
Window
{
id:root;
visible: true;
width: 200; height: 200
XmlListModel
{
id: xmlModel
source: "qrc:/demo.xml"
query: "/rss/channel/item"
XmlListModelRole { name: "title"; elementName: "title" }
XmlListModelRole { name: "pubDate"; elementName: "pubDate" }
XmlListModelRole { name: "link"; elementName: "link" }
}
ListView
{
anchors.fill: parent
model: xmlModel
delegate: Text { text: title + ": " + pubDate + "; link: " + link }
}
}
“/rss/channel/item” 指定 XmlListModel 应该为 XML 文档中的每个 <item> 生成一个模型项。
三、属性成员
1、count : int
模型中数据条目的数量。
2、progress : real
这表示下载 XML 数据源的当前进度。该值的范围从 0.0(未下载数据)到 1.0(已下载所有数据)。 如果 XML 数据不是来自远程源(来自网络上的xml文件),则一旦读取数据,进度就会变为 1.0。
请注意,当进度为 1.0 时,XML 数据已下载,但此时尚未加载到模型中。 使用 status 属性可以查明 XML 数据何时被读取并加载到模型中。
3、query : string
用于从此模型的 XmlListModelRole 对象创建模型项的基本路径。应以“/”开头。
4、roles : list<XmlListModelRole>
可用于此模型的角色。
5、source : url
XML 数据源的位置。可以来自网络。
6、status : enumeration
模型加载状态。
- XmlListModel.Null:没有为此模型设置 XML 数据。
- XmlListModel.Ready:XML 数据已加载到模型中。
- XmlListModel.Loading:模型正在读取和加载 XML 数据。
- XmlListModel.Error:加载模型时出错。
四、成员函数
1、errorString()
如果状态为 XmlListModel.Error,则返回发生的最后一个错误的字符串描述。
2、reload()
重新加载模型。
XmlListModelRole
一、属性成员
1、attributeName : string
将用于读取数据的 XML 元素的属性。XML 元素由 elementName 属性指定。
2、elementName : string
将用于读取数据的 XML 元素的名称或 XML 元素的路径。该元素必须实际包含文本。
如上图指示要为 "documents/document" 和 "documents/document1" 分别创建模型项。
可省略,如下:
为 "documents/document" 的所有结点创建模型项。
3、name : string
角色的名称。此名称用于访问此角色的模型数据。
如上图,为 document 结点创建的模型项中属性为“title”(attributeName 指定的)的值。
测试代码:
<?xml version="1.0" encoding="UTF-8"?>
<documents>
<document title="a1" title2="b1"/>
<document1 timestamp="a2" title2="b2"/>
</documents>
import QtQuick 2.12
import QtQuick.Window 2.0
import QtQml.XmlListModel
Window
{
id:root;
visible: true;
width: 200; height: 200
XmlListModel
{
id: xmlModel
source: "qrc:/demo.xml"
query: "/documents"
XmlListModelRole
{
name: "modelItem01"
elementName: "document"
attributeName: "title"
}
XmlListModelRole
{
name: "timestamp"
elementName: "document1"
attributeName: "title2"
}
}
ListView
{
anchors.fill: parent
model: xmlModel
delegate: Text { text: modelItem01 }
}
}
二、使用示例
<?xml version="1.0" encoding="UTF-8"?>
<documents>
<document title="a1" title2="b1"/>
<document title="a2" title2="b2"/>
<document title="a3" title2="b3"/>
<document title="a4" title2="b4"/>
</documents>
import QtQuick 2.12
import QtQuick.Window 2.0
import QtQml.XmlListModel
Window
{
id:root;
visible: true;
width: 200; height: 200
XmlListModel
{
id: xmlModel
source: "qrc:/demo.xml"
query: "/documents/document"
XmlListModelRole
{
name: "modelItem01"
elementName: ""
attributeName: "title"
}
}
ListView
{
anchors.fill: parent
model: xmlModel
delegate: Text { text: modelItem01 }
}
}