Spec-Zone.ru › Qt 5.15

Класс QQmlContext

Класс QQmlContext определяет контекст внутри движка QML. Подробнее...

Заголовок: #include <QQmlContext>
qmake: QT += qml
Наследует: QObject
  • Список всех членов, включая унаследованные

Типы публичного интерфейса

Структура PropertyPair

Публичные функции

QQmlContext(QQmlContext *parentContext, QObject *parent = nullptr)
QQmlContext(QQmlEngine *engine, QObject *parent = nullptr)
виртуальный ~QQmlContext() override
QUrl baseUrl() const
QObject * contextObject() const
QVariant contextProperty(const QString &name) const
QQmlEngine * engine() const
bool isValid() const
QString nameForObject(QObject *object) const
QQmlContext * parentContext() const
QUrl resolvedUrl(const QUrl &src)
void setBaseUrl(const QUrl &baseUrl)
void setContextObject(QObject *object)
void setContextProperties(const QVector<QQmlContext::PropertyPair> &properties)
void setContextProperty(const QString &name, QObject *value)
void setContextProperty(const QString &name, const QVariant &value)

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

Контексты позволяют предоставлять данные компонентам QML, созданным движком QML.

Каждый QQmlContext содержит набор свойств, отличных от свойств QObject, которые позволяют явно привязать данные к контексту по имени. Свойства контекста определяются и обновляются с помощью вызова QQmlContext::setContextProperty(). Следующий пример показывает, как Qt-модель привязывается к контексту, а затем используется из файла QML.

QQmlEngine engine;
QStringListModel modelData;
QQmlContext *context = new QQmlContext(engine.rootContext());
context->setContextProperty("myModel", &modelData);

QQmlComponent component(&engine);
component.setData("import QtQuick 2.0\nListView { model: myModel }", QUrl());
QObject *window = component.create(context);

Обратите внимание, что создатель обязан удалить любой QQmlContext, который он создал. Если объект context в примере больше не нужен, когда экземпляр компонента window уничтожается, то context должен быть уничтожен явно. Самый простой способ гарантировать это — установить window в качестве родителя context.

Для упрощения привязки и поддержания больших наборов данных в контексте может быть установлен объект. Все свойства объекта контекста доступны по имени в контексте, как если бы они были индивидуально добавлены через вызовы QQmlContext::setContextProperty(). Изменения значений свойств обнаруживаются через сигнал уведомления свойства. Установка объекта контекста быстрее и проще, чем ручное добавление и поддержание значений свойств контекста.

Следующий пример имеет тот же эффект, что и предыдущий, но он использует объект контекста.

class MyDataSet : ... {
    ...
    Q_PROPERTY(QAbstractItemModel *myModel READ model NOTIFY modelChanged)
    ...
};

MyDataSet myDataSet;
QQmlEngine engine;
QQmlContext *context = new QQmlContext(engine.rootContext());
context->setContextObject(&myDataSet);

QQmlComponent component(&engine);
component.setData("import QtQuick 2.0\nListView { model: myModel }", QUrl());
component.create(context);

Все свойства, добавленные явно с помощью QQmlContext::setContextProperty(), имеют приоритет над свойствами объекта контекста.

Иерархия контекстов

Контексты образуют иерархию. Корень этой иерархии — корневой контекст движка QML. Дочерние контексты наследуют свойства контекста своих родителей; если дочерний контекст устанавливает свойство контекста, которое уже существует в его родителе, новое свойство контекста переопределяет свойство родителя.

В следующем примере определены два контекста — context1 и context2. Второй контекст переопределяет свойство контекста «b», унаследованное от первого, новым значением.

QQmlEngine engine;
QQmlContext *context1 = new QQmlContext(engine.rootContext());
QQmlContext *context2 = new QQmlContext(context1);

context1->setContextProperty("a", 12);
context1->setContextProperty("b", 12);

context2->setContextProperty("b", 15);

Хотя QML-объекты, созданные в контексте, не являются строго принадлежащими этому контексту, их привязки — да. Если контекст уничтожается, то привязки свойств активных QML-объектов перестанут оцениваться.

Предупреждение: Установка объекта контекста или добавление новых свойств контекста после создания объекта в этом контексте — дорогостоящая операция (суть в переоценке всех привязок). Поэтому, по возможности, завершите «настройку» контекста до его использования для создания каких-либо объектов.

См. также Выставление атрибутов типов C++ в QML.

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

QQmlContext::QQmlContext(QQmlContext *parentContext, QObject *parent = nullptr)

Создает новый QQmlContext с заданным parentContext и QObject parent.

QQmlContext::QQmlContext(QQmlEngine *engine, QObject *parent = nullptr)

Создает новый QQmlContext как дочерний контекст корневого контекста engine и QObject parent.

[override virtual] QQmlContext::~QQmlContext()

Уничтожает QQmlContext.

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

QUrl QQmlContext::baseUrl() const

Возвращает базовый URL-адрес компонента или содержащего компонента, если он не задан.

См. также setBaseUrl().

QObject *QQmlContext::contextObject() const

Возвращает объект контекста или 0, если объект контекста отсутствует.

См. также setContextObject().

QVariant QQmlContext::contextProperty(const QString &name) const

Возвращает значение свойства name для данного контекста в виде QVariant.

См. также setContextProperty().

QQmlEngine *QQmlContext::engine() const

Возвращает QQmlEngine контекста или 0, если у контекста нет QQmlEngine или QQmlEngine был уничтожен.

bool QQmlContext::isValid() const

Возвращает, является ли контекст действительным.

Чтобы контекст был действительным, он должен иметь движок, а его contextObject(), если он есть, не должен быть удален.

QString QQmlContext::nameForObject(QObject *object) const

Возвращает имя object в этом контексте или пустую строку, если object не имеет имени в контексте. Объекты имеют имена, задаваемые с помощью setContextProperty(), или в виде id в случае QML-контекстов.

Если у объекта есть несколько имён, возвращается первое.

QQmlContext *QQmlContext::parentContext() const

Возвращает родительский QQmlContext контекста или 0, если у этого контекста нет родителя или родитель был уничтожен.

QUrl QQmlContext::resolvedUrl(const QUrl &src)

Разрешает URL-адрес src относительно URL-адреса содержащего компонента.

См. также QQmlEngine::baseUrl() и setBaseUrl().

void QQmlContext::setBaseUrl(const QUrl &baseUrl)

Явно задаёт URL-адрес, который resolvedUrl() будет использовать для относительных ссылок к baseUrl.

Вызов этой функции переопределит URL содержащего компонента, используемого по умолчанию.

См. также baseUrl() и resolvedUrl().

void QQmlContext::setContextObject(QObject *object)

Установить контекстное объект.

См. также contextObject().

void QQmlContext::setContextProperties(const QVector<QQmlContext::PropertyPair> &properties)

Установить набор свойств в этом контексте.

Установка всех свойств в одной группе избегает ненужного обновления выражений и, следовательно, рекомендуется вместо вызова setContextProperty() для каждого отдельного свойства.

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

См. также QQmlContext::setContextProperty().

void QQmlContext::setContextProperty(const QString &name, QObject *value)

Установить значение свойства name в этом контексте.

QQmlContext не берет на себя ответственность за value.

См. также contextProperty().

void QQmlContext::setContextProperty(const QString &name, const QVariant &value)

Установить значение свойства name в этом контексте.

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

Spec-Zone.ru

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