Spec-Zone.ru › Qt 5.6

Класс EnginioModel

EnginioModel представляет данные из Enginio как QAbstractListModel. Подробнее...

Заголовок: #include <EnginioModel>
С момента: Qt 5.3
Наследует от: QAbstractListModel
  • Список всех членов, включая унаследованные

Свойства

  • client : EnginioClient *
  • operation : Enginio::Operation
  • query : QJsonObject
  • 1 свойство унаследовано от QObject

Открытые функции

EnginioModel(QObject *parent = Q_NULLPTR)
~EnginioModel()
EnginioReply * append(const QJsonObject &object)
EnginioClient * client() const
Enginio::Operation operation() const
QJsonObject query()
EnginioReply * reload()
EnginioReply * remove(int row)
void setClient(const EnginioClient *client)
EnginioReply * setData(int row, const QVariant &value, const QString &role)
EnginioReply * setData(int row, const QJsonObject &value)
void setOperation(Enginio::Operation operation)
void setQuery(const QJsonObject &query)
  • 4 открытые функции унаследованы от QAbstractListModel
  • 39 открытых функций унаследованы от QAbstractItemModel
  • 31 открытых функций унаследовано от QObject

Сигналы

void clientChanged(EnginioClient *client)
void operationChanged(Enginio::Operation operation)
void queryChanged(const QJsonObject &query)
  • 18 сигналов унаследовано от QAbstractItemModel
  • 2 сигнала унаследовано от QObject

Дополнительные унаследованные члены

  • 2 открытых слота унаследовано от QAbstractItemModel
  • 1 открытый слот унаследован от QObject
  • 11 статических открытых членов унаследовано от QObject
  • 19 защищенных функций унаследовано от QAbstractItemModel
  • 9 защищенных функций унаследовано от QObject
  • 1 защищенный слот унаследован от QAbstractItemModel

Подробное описание

EnginioModel представляет данные из Enginio как QAbstractListModel.

EnginioModel — это QAbstractListModel, вместе с представлением позволяет отображать результаты запроса удобным способом. Модель выполняет операции запроса, обновления и создания асинхронно на коллекциях бэкенда Enginio, что позволяет не только читать данные из облака, но и изменять их.

Простейший тип запроса:

{ "objectType": "objects.fruits" }

Назначение такого запроса модели приводит к скачиванию всех объектов из коллекции "objects.fruits". Можно добавить новые объекты, изменить или удалить их.

Запрос должен привести к списку объектов, каждый объект становится элементом модели. Свойства элементов используются в качестве имён ролей. Существует несколько предопределённых имён ролей, которые всегда будут доступны (Роль).

Операции выполняются асинхронно, что означает, что интерфейс пользователя не блокируется, пока модель инициализируется и обновляется. Каждое изменение делится на два шага: запрос и подтверждение. Например, когда вызывается append, EnginioModel возвращает немедленно, как будто операция прошла успешно. На заднем плане она ожидает подтверждения от бэкенда, и только после этого операция действительно завершается. Может произойти сбой операции, например, из-за недостаточных прав доступа, в этом случае операция будет отменена.

Есть два способа отследить, совпадает ли состояние элемента в модели и на бэкенде. Каждый элемент имеет роль, которая возвращает булево значение SyncedRole, имя роли "_synced", которое указывает, был ли элемент успешно обновлён на сервере. Эта роль, например, может использоваться для индикатора ожидания, пока свойство обновляется. В качестве альтернативы можно отслеживать состояние каждого EnginioReply, возвращаемого EnginioModel. Операция подтверждается, когда ответ завершен без ошибок.

Когда ответ завершается, пользователь отвечает за его удаление, это можно сделать, подключив сигнал finished к deleteLater.

QObject::connect(reply, &EnginioReply::finished, reply, &EnginioReply::deleteLater);

Примечание: небезопасно использовать оператор delete напрямую в finished.

Примечание: EnginioClient излучает сигналы finished и error для модели, а не сама модель.

Свойство query может содержать один или несколько параметров: параметр "sort" для получения предварительно отсортированных данных:

{
  "objectType": "objects.fruits",
  "sort": [{"sortBy":"price", "direction": "asc"}]
}

Параметр "query" используется для фильтрации:

{
  "objectType": "objects.fruits",
  "query": {"name": {"$in": ["apple", "orange", "kiwi"]}}
}

Параметр "limit" для ограничения количества результатов:

{
  "objectType": "objects.fruits",
  "limit": 10
}

Параметр "offset" для пропуска некоторых результатов с начала набора результатов:

{
  "objectType": "objects.fruits",
  "offset": 10
}

Параметры действительны только во время первоначальной загрузки модели и никоим образом не принудительно применяются при обновлении или ином изменении данных модели. QSortFilterProxyModel можно использовать для более продвинутой сортировки и фильтрации на стороне клиента.

EnginioModel не может определить, когда свойство результата вычисляется на бэкенде. Например, параметр "include" для query заполняет исходного создателя объекта полным объектом, представляющим "creator".

{
  "objectType": "objects.fruits",
  "include": {"creator": {}}
}

Для модели свойство "creator" больше не является ссылкой (как на бэкенде), а полным объектом. Но в то время как полный объект доступен, попытки изменить данные объекта не будут успешны.

Документация свойств

client : EnginioClient *

Это свойство содержит EnginioClient, используемый моделью.

Функции доступа:

EnginioClient * client() const
void setClient(const EnginioClient *client)

Сигнал уведомления:

void clientChanged(EnginioClient *client)

См. также EnginioClient.

operation : Enginio::Operation

Это свойство содержит тип операции запроса.

Функции доступа:

Enginio::Operation operation() const
void setOperation(Enginio::Operation operation)

Сигнал уведомления:

void operationChanged(Enginio::Operation operation)

См. также Enginio::Operation и query().

query : QJsonObject

Это свойство содержит запрос, используемый для заполнения модели данными из бэкенда.

См. документацию EnginioClient::query() для получения информации о том, как создать запрос.

Хотя реализация EnginioClient query() возвращает данные запроса в виде объекта JSON, для модели запрос будет интерпретироваться как данные модели.

Как правило, запрос предназначен для одного типа объекта и вернёт все объекты в базе данных этого типа. Затем модель будет представлять каждый возвращённый объект как одну строку. Он может быть ограничен и отсортирован аналогично своему аналогу в EnginioClient.

Важно отметить, что модель не может сохранить тот же порядок сортировки, что и бэкенд, поэтому сортировка и ограничения сохраняются только до тех пор, пока не произойдёт вставка или удаление.

Функции доступа:

QJsonObject query()
void setQuery(const QJsonObject &query)

Сигнал уведомления:

void queryChanged(const QJsonObject &query)

См. также EnginioClient::query().

Документация функций-членов

EnginioModel::EnginioModel(QObject *parent = Q_NULLPTR)

Создаёт новую модель с parent в качестве родительского объекта QObject.

EnginioModel::~EnginioModel()

Удаляет модель.

EnginioReply *EnginioModel::append(const QJsonObject &object)

Добавляет новый object в модель и базу данных.

Эта функция добавляет новый объект в кэш локальной модели и отправляет асинхронный запрос на бэкенд.

Поскольку добавление объекта в базу данных может завершиться ошибкой по разным причинам, возвращённый ответ необходимо сохранить и использовать для обработки ошибок (см. EnginioReply). Если операция завершится ошибкой, объект, который предполагалось добавить, будет удалён из локальной модели. Если модель используется в представлении, а бэкенд не принимает объект, потому что он нарушает валидатор, пользователю будет видно, что новая строка в представлении появляется и снова исчезает.

Возвращает EnginioReply с бэкенда.

См. также EnginioClient::create().

EnginioReply *EnginioModel::reload()

Перезагружает данные модели с сервера. Это аналогично reset и вызовет modelAboutToBeReset() и modelReset(). Эта функция делает внутреннее состояние модели недопустимым, перезагружает её с бэкенда и сбрасывает все представления.

Примечание: при использовании этой функции в то время как выполняются другие запросы к серверу, результат неопределён. Например, при вызове append() и затем reset() до завершения append, модель может или не может содержать результат операции append.

Возвращает ответ с бэкенда.

Эта функция была добавлена в Qt 1.1.

EnginioReply *EnginioModel::remove(int row)

Удаляет строку row из модели и базы данных.

Эта функция сразу удаляет row из локального кэша и отправляет запрос на удаление на бэкенд Enginio.

Возвращает EnginioReply с бэкенда.

См. также EnginioClient::remove().

EnginioReply *EnginioModel::setData(int row, const QVariant &value, const QString &role)

Обновляет значение в строке row локального кэша модели и отправляет запрос на обновление на бэкенд Enginio.

role — это свойство объекта, которое будет обновлено на новое значение value.

Возвращает ответ с бэкенда.

См. также EnginioClient::update().

EnginioReply *EnginioModel::setData(int row, const QJsonObject &value)

Это перегруженная функция.

Обновляет значение value в строке row локального кэша модели и отправляет запрос на обновление на бэкенд Enginio.

Все свойства value будут использованы для обновления элемента в row. Это может быть полезно для обновления нескольких свойств элементов одним запросом.

Возвращает ответ с бэкенда.

См. также EnginioClient::update().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/enginiomodel.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API