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 }
    }
}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐