Класс 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) |
- 32 открытых функции унаследованные от 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/qt-5.9/qqmlcontext.html