Тип QML XmlListModel
Для указания только для чтения модели с использованием выражений XPath. Подробнее...
| Выражение импорта: | import QtQuick.XmlListModel 2.12 |
Свойства
- count : int
- namespaceDeclarations : строка
- progress : вещественное
- query : строка
- roles : список<XmlRole>
- source : url
- status : перечисление
- xml : строка
Методы
- errorString()
- объект get(int index)
- reload()
Подробное описание
Для использования этого элемента необходимо импортировать модуль со следующей строкой:
import QtQuick.XmlListModel 2.0
XmlListModel используется для создания модели только для чтения из данных XML. Его можно использовать в качестве источника данных для элементов отображения (таких как ListView, PathView, GridView) и других элементов, взаимодействующих с данными модели (таких как Repeater).
Например, если есть документ XML по адресу http://www.mysite.com/feed.xml, подобный этому:
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
...
<channel>
<item>
<title>A blog post</title>
<pubDate>Sat, 07 Sep 2010 10:00:01 GMT</pubDate>
</item>
<item>
<title>Another blog post</title>
<pubDate>Sat, 07 Sep 2010 15:35:01 GMT</pubDate>
</item>
</channel>
</rss> XmlListModel может создать модель из этих данных, как показано ниже:
import QtQuick 2.0
import QtQuick.XmlListModel 2.0
XmlListModel {
id: xmlModel
source: "http://www.mysite.com/feed.xml"
query: "/rss/channel/item"
XmlRole { name: "title"; query: "title/string()" }
XmlRole { name: "pubDate"; query: "pubDate/string()" }
} Значение query "/rss/channel/item" указывает, что XmlListModel должен создавать элемент модели для каждого <item> в документе XML.
Объекты XmlRole определяют атрибуты элемента модели. Здесь каждый элемент модели будет иметь атрибуты title и pubDate, которые соответствуют значениям title и pubDate их соответствующего <item>. (См. XmlRole::query для получения дополнительных примеров допустимых выражений XPath для XmlRole).
Модель может использоваться в ListView, например, так:
ListView {
width: 180; height: 300
model: xmlModel
delegate: Text { text: title + ": " + pubDate }
} [Отсутствует изображение qml-xmllistmodel-example.png]
Данные XmlListModel загружаются асинхронно, и status устанавливается в XmlListModel.Ready при завершении загрузки. Это означает, что при использовании XmlListModel для просмотра, просмотр не заполняется до тех пор, пока модель не загрузится.
Использование ключевых XML-ролей
Вы можете определить определенные роли как "ключи", чтобы при вызове reload() модель добавляла и обновляла только данные, содержащие новые значения для этих ключей.
Например, если роль "pubDate" указана следующим образом:
XmlRole { name: "pubDate"; query: "pubDate/string()"; isKey: true } Тогда при вызове reload() модель будет добавлять и перезагружать только элементы с значением "pubDate", которого еще нет в модели.
Это полезно при отображении содержимого XML-документов, которые обновляются постепенно (например, ленты RSS), чтобы избежать перерисовки всего содержимого модели в представлении.
Если указано несколько ключевых ролей, модель добавляет и перезагружает только элементы, у которых совокупное значение всех ключевых ролей еще не присутствует в модели.
См. также Демонстрация Qt Quick — RSS News.
Документация по свойствам
count : int
Количество записей данных в модели.
namespaceDeclarations : строка
Декларации пространств имен, используемые в запросах XPath.
Пространства имен должны быть объявлены, как в XQuery. Например, если запрашиваемый документ по адресу http://mysite.com/feed.xml использует пространство имен "http://www.w3.org/2005/Atom", его можно объявить как пространство имен по умолчанию:
XmlListModel {
source: "http://mysite.com/feed.xml"
query: "/feed/entry"
namespaceDeclarations: "declare default element namespace 'http://www.w3.org/2005/Atom';"
XmlRole { name: "title"; query: "title/string()" }
} progress : вещественное
Указывает текущий прогресс загрузки источника данных XML. Это значение находится в диапазоне от 0,0 (нет загруженных данных) до 1,0 (все данные загружены). Если данные XML не из удаленного источника, прогресс становится 1,0 сразу после чтения данных.
Обратите внимание, что когда прогресс равен 1,0, данные XML загружены, но ещё не загружены в модель на данном этапе. Используйте свойство status, чтобы узнать, когда данные XML были прочитаны и загружены в модель.
query : строка
Абсолютный запрос XPath, представляющий базовый запрос для создания элементов модели из объектов XmlRole этой модели. Запрос должен начинаться с '/' или '//'.
roles : список<XmlRole>
Роли, доступные для этой модели.
source : url
Расположение источника данных XML.
Если оба source и xml установлены, используется xml.
status : перечисление
Указывает состояние загрузки модели, которое может быть одним из следующих:
- XmlListModel.Null — данные XML не заданы для этой модели.
- XmlListModel.Ready — данные XML загружены в модель.
- XmlListModel.Loading — модель загружает данные XML.
- XmlListModel.Error — во время загрузки модели произошла ошибка. Подробности об ошибке см. в errorString().
См. также progress.
xml : строка
Это свойство содержит данные XML для этой модели, если оно задано.
Текст предполагается закодированным в UTF-8.
Если оба source и xml установлены, используется xml.
Документация по методам
errorString()
Возвращает строку с описанием последней ошибки, если status равен XmlListModel::Error.
объект get(int index)
Возвращает элемент по индексу index в модели.
Например, для модели, такой как эта:
XmlListModel {
id: model
source: "http://mysite.com/feed.xml"
query: "/feed/entry"
XmlRole { name: "title"; query: "title/string()" }
} Это обращение к значению title для первого элемента модели:
var title = model.get(0).title;
reload()
Перезагружает модель.
Если не заданы ключевые роли, все существующие данные модели удаляются, и модель создаётся заново.
В противном случае, элементы добавляются только в том случае, если модель уже не содержит элементы с соответствующими значениями ключевых ролей.
См. также Использование ключевых XML-ролей и XmlRole::isKey.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qml-qtquick-xmllistmodel-xmllistmodel.html