Класс QQmlContext
Класс QQmlContext определяет контекст внутри движка QML. Подробнее...
| Заголовок: | #include <QQmlContext> |
| qmake: | QT += qml |
| Наследует: | QObject |
Открытые функции
| QQmlContext(QQmlEngine *engine, QObject *parent = Q_NULLPTR) | |
| QQmlContext(QQmlContext *parentContext, QObject *parent = Q_NULLPTR) | |
| virtual | ~QQmlContext() |
| 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 | setContextProperty(const QString &name, QObject *value) |
| void | setContextProperty(const QString &name, const QVariant &value) |
- 31 открытые функции, унаследованные от QObject
Дополнительные унаследованные члены
- 1 свойство, унаследованное от QObject
- 1 открытый слот, унаследованный от QObject
- 2 сигнала, унаследованные от QObject
- 11 статические открытые члены, унаследованные от QObject
- 9 защищённые функции, унаследованные от QObject
Подробное описание
Класс QQmlContext определяет контекст внутри движка QML.
Контексты позволяют данные быть доступными для компонентов 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. Все свойства объекта контекста доступны по имени в контексте, как будто они все были индивидуально добавлены с помощью вызовов 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(QQmlEngine *engine, QObject *parent = Q_NULLPTR)
Создаёт новый QQmlContext как дочерний контекст корневого контекста engine и QObject parent.
QQmlContext::QQmlContext(QQmlContext *parentContext, QObject *parent = Q_NULLPTR)
Создаёт новый QQmlContext с заданным parentContext и QObject parent.
[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(), или с помощью идентификаторов в случае контекстов, созданных 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)
Устанавливает контекстное object.
См. также contextObject().
void QQmlContext::setContextProperty(const QString &name, QObject *value)
Устанавливает value свойства name в этом контексте.
QQmlContext не принимает владение value.
См. также contextProperty().
void QQmlContext::setContextProperty(const QString &name, const QVariant &value)
Устанавливает value свойства name в этом контексте.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qqmlcontext.html