Spec-Zone.ru › Qt 5.6

Класс QQmlEngine

Класс QQmlEngine предоставляет среду для создания экземпляров компонентов QML. Подробнее...

Заголовок: #include <QQmlEngine>
qmake: QT += qml
С версии: Qt 5.0
Наследует: QJSEngine
Наследуется от:

QQmlApplicationEngine

  • Список всех членов, включая унаследованные

Типы

Перечисление ObjectOwnership { CppOwnership, JavaScriptOwnership }

Свойства

  • offlineStoragePath : QString
  • 1 свойство унаследовано от QObject

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

QQmlEngine(QObject *parent = Q_NULLPTR)
virtual ~QQmlEngine()
void addImageProvider(const QString &providerId, QQmlImageProviderBase *provider)
void addImportPath(const QString &path)
void addPluginPath(const QString &path)
QUrl baseUrl() const
void clearComponentCache()
QQmlImageProviderBase * imageProvider(const QString &providerId) const
QStringList importPathList() const
bool importPlugin(const QString &filePath, const QString &uri, QList<QQmlError> *errors)
QQmlIncubationController * incubationController() const
QNetworkAccessManager * networkAccessManager() const
QQmlNetworkAccessManagerFactory * networkAccessManagerFactory() const
QString offlineStoragePath() const
bool outputWarningsToStandardError() const
QStringList pluginPathList() const
void removeImageProvider(const QString &providerId)
QQmlContext * rootContext() const
void setBaseUrl(const QUrl &url)
void setImportPathList(const QStringList &paths)
void setIncubationController(QQmlIncubationController *controller)
void setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory *factory)
void setOfflineStoragePath(const QString &dir)
void setOutputWarningsToStandardError(bool enabled)
void setPluginPathList(const QStringList &paths)
void trimComponentCache()
  • 9 public functions inherited from QJSEngine
  • 31 public functions inherited from QObject

Сигналы

void quit()
void warnings(const QList<QQmlError> &warnings)
  • 2 signals inherited from QObject

Статические публичные члены

QQmlContext * contextForObject(const QObject *object)
ObjectOwnership objectOwnership(QObject *object)
void setContextForObject(QObject *object, QQmlContext *context)
void setObjectOwnership(QObject *object, ObjectOwnership ownership)
  • 11 static public members inherited from QObject

Переопределенные защищенные функции

virtual bool event(QEvent *e)
  • 9 protected functions inherited from QObject

Связанные нечлены

QObject * qmlAttachedPropertiesObject(const QObject *attachee, bool create = true)
void qmlClearTypeRegistrations()
QQmlContext * qmlContext(const QObject *object)
QQmlEngine * qmlEngine(const QObject *object)
QQmlInfo qmlInfo(const QObject *object)
bool qmlProtectModule(const char *uri, int majVersion)
int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
int qmlRegisterExtendedUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason)
int qmlRegisterInterface(const char *typeName)
int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor)
int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, QJSValue(* ) ( QQmlEngine *, QJSEngine * ) callback)
int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, QObject *(* ) ( QQmlEngine *, QJSEngine * ) callback)
int qmlRegisterSingletonType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)
int qmlRegisterType()
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
int qmlRegisterType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)
int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &message)
int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &message)

Макросы

QML_DECLARE_TYPE()
QML_DECLARE_TYPEINFO(Type, Flags)

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

  • 1 public slot унаследованный от QObject
  • 9 protected functions унаследованных от QObject

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

Класс QQmlEngine предоставляет среду для создания QML-компонентов.

Каждый QML-компонент создаётся в QQmlContext. QQmlContext необходимы для передачи данных QML-компонентам. В QML контексты организованы иерархически, и эта иерархия управляется классом QQmlEngine.

Перед созданием QML-компонентов приложение должно создать QQmlEngine для доступа к QML-контексту. Пример создания простого элемента Text:

QQmlEngine engine;
QQmlComponent component(&engine);
component.setData("import QtQuick 2.0\nText { text: \"Hello world!\" }", QUrl());
QQuickItem *item = qobject_cast<QQuickItem *>(component.create());

//add item to view, etc
...

В этом случае элемент Text будет создан в корневом контексте root context движка.

Обратите внимание, что версия Qt Quick 1 называется QDeclarativeEngine.

См. также QQmlComponent, QQmlContext и QML Global Object.

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

enum QQmlEngine::ObjectOwnership

ObjectOwnership управляет тем, уничтожает ли QML автоматически QObject, когда соответствующий JavaScript-объект удаляется сборщиком мусора движка. Два варианта:

Константа Значение Описание
QQmlEngine::CppOwnership 0 Объект принадлежит коду C++ и QML никогда не удалит его. Метод JavaScript destroy() не может быть использован для этих объектов. Этот вариант аналогичен QScriptEngine::QtOwnership.
QQmlEngine::JavaScriptOwnership 1 Объект принадлежит JavaScript. Когда объект возвращается в QML как результат вызова метода, QML отслеживает его и удаляет, если не осталось JavaScript-ссылок на него и у него нет родительского объекта QObject::parent(). Объект, отслеживаемый одним QQmlEngine, будет удалён во время уничтожения этого QQmlEngine. Таким образом, JavaScript-ссылки между объектами с JavaScriptOwnership из двух разных движков не будут действительными, если один из этих движков будет удалён. Этот вариант аналогичен QScriptEngine::ScriptOwnership.

В целом, приложение обычно не нужно явно задавать владение объектом. QML использует эвристику для установки значения по умолчанию. По умолчанию объект, созданный QML, имеет JavaScriptOwnership. Исключение составляют корневые объекты, созданные вызовом QQmlComponent::create() или QQmlComponent::beginCreate(), которые по умолчанию имеют CppOwnership. Владение этими корневыми объектами считается переданным вызывающему коду C++.

Объекты, не созданные QML, по умолчанию имеют CppOwnership. Исключение составляют объекты, возвращаемые из вызовов методов C++; их владение будет установлено в JavaScriptOwnership. Это относится только к явным вызовам методов или слотов с Q_INVOKABLE, но не к вызовам методов-получателей свойств.

Вызов setObjectOwnership() переопределяет эвристику по умолчанию, используемую QML.

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

offlineStoragePath : QString

Это свойство содержит каталог для хранения автономных пользовательских данных.

Возвращает каталог, в котором хранятся SQL и другие автономные хранилища.

Здесь хранятся QQuickWebView и SQL-базы данных, созданные с помощью openDatabase().

По умолчанию — QML/OfflineStorage в каталоге пользовательских приложений платформы.

Обратите внимание, что путь может в данный момент отсутствовать в файловой системе, поэтому вызывающие стороны, желающие создать новые файлы в этом расположении, должны сначала создать его — см. QDir::mkpath().

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

QString offlineStoragePath() const
void setOfflineStoragePath(const QString &dir)

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

QQmlEngine::QQmlEngine(QObject *parent = Q_NULLPTR)

Создаёт новый QQmlEngine с заданным parent.

[virtual] QQmlEngine::~QQmlEngine()

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

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

См. документацию QJSEngine для получения подробной информации об очистке движка JS.

void QQmlEngine::addImageProvider(const QString &providerId, QQmlImageProviderBase *provider)

Устанавливает provider для использования при запросах изображений с помощью схемы url image с хостом providerId. QQmlEngine берёт на себя владение provider.

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

Все необходимые поставщики изображений должны быть добавлены в движок перед загрузкой любых файлов QML-источников.

См. также removeImageProvider(), QQuickImageProvider и QQmlImageProviderBase.

void QQmlEngine::addImportPath(const QString &path)

Добавляет path в качестве каталога, в котором движок ищет установленные модули в структуре каталогов на основе URL.

path может быть каталогом локальной файловой системы, путем к ресурсу Qt (:/imports), URL-адресом ресурса Qt (qrc:/imports) или URL-адресом.

path будет преобразован в каноническую форму перед добавлением в список путей импорта.

Новый добавленный path будет первым в importPathList().

См. также setImportPathList() и Модули QML.

void QQmlEngine::addPluginPath(const QString &path)

Добавляет path в качестве каталога, в котором движок ищет native плагины для импортированных модулей (ссылка на которые указана в файле qmldir).

По умолчанию, список содержит только ., т. е. движок ищет в каталоге самого файла qmldir.

Новый добавленный path будет первым в pluginPathList().

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

QUrl QQmlEngine::baseUrl() const

Возвращает базовый URL для этого движка. Базовый URL используется только для разрешения компонентов, когда в конструктор QQmlComponent передаётся относительный URL.

Если базовый URL не был явно задан, этот метод возвращает текущий рабочий каталог приложения.

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

void QQmlEngine::clearComponentCache()

Очищает внутренний кэш компонентов движка.

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

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

После очистки кэша компонентов компоненты необходимо загрузить, прежде чем можно будет создавать новые объекты.

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

[static] QQmlContext *QQmlEngine::contextForObject(const QObject *object)

Возвращает QQmlContext для object или 0, если контекст не был задан.

При создании QQmlEngine объекта QObject, контекст устанавливается автоматически.

См. также setContextForObject(), qmlContext() и qmlEngine().

[virtual protected] bool QQmlEngine::event(QEvent *e)

Переопределено из QObject::event().

QQmlImageProviderBase *QQmlEngine::imageProvider(const QString &providerId) const

Возвращает поставщика изображений, установленного для providerId.

Возвращает поставщика, если он найден; в противном случае возвращает 0.

См. также QQuickImageProvider.

QStringList QQmlEngine::importPathList() const

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

Например, если /opt/MyApp/lib/imports находится в пути, то QML, импортирующий com.mycompany.Feature, заставит QQmlEngine искать компоненты, предоставляемые этим модулем, в /opt/MyApp/lib/imports/com/mycompany/Feature/. Файл qmldir необходим для определения сопоставления версий типов и, возможно, плагинов расширений QML.

По умолчанию, список содержит каталог исполняемого файла приложения, пути, указанные в переменной среды QML2_IMPORT_PATH, и встроенный Qml2ImportsPath из QLibraryInfo.

См. также addImportPath() и setImportPathList().

bool QQmlEngine::importPlugin(const QString &filePath, const QString &uri, QList<QQmlError> *errors)

Импортирует плагин с именем filePath с предоставленным uri. Возвращает true, если плагин был успешно импортирован; в противном случае возвращает false.

При ошибке и если errors не равен null, список errors будет содержать любые произошедшие ошибки, добавленные в начало.

Плагин должен быть плагином Qt, реализующим интерфейс QQmlExtensionPlugin.

QQmlIncubationController *QQmlEngine::incubationController() const

Возвращает текущий контроллер инкубации или 0, если контроллер не был задан.

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

QNetworkAccessManager *QQmlEngine::networkAccessManager() const

Возвращает общий QNetworkAccessManager, который может быть использован любым типом QML, созданным данным движком.

Если QQmlNetworkAccessManagerFactory был установлен, а QNetworkAccessManager ещё не был создан, будет использован QQmlNetworkAccessManagerFactory для создания QNetworkAccessManager; в противном случае возвращаемый QNetworkAccessManager не будет иметь прокси или кэш.

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

QQmlNetworkAccessManagerFactory *QQmlEngine::networkAccessManagerFactory() const

Возвращает текущий QQmlNetworkAccessManagerFactory.

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

[static] ObjectOwnership QQmlEngine::objectOwnership(QObject *object)

Возвращает владение object.

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

bool QQmlEngine::outputWarningsToStandardError() const

Возвращает true, если сообщения об ошибках будут выводиться в stderr, помимо того, что они будут испускаться сигналом warnings(), в противном случае false.

Значение по умолчанию — true.

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

QStringList QQmlEngine::pluginPathList() const

Возвращает список каталогов, в которых движок ищет native плагины для импортированных модулей (ссылка на которые указана в файле qmldir).

По умолчанию, список содержит только ., т. е. движок ищет в каталоге самого файла qmldir.

См. также addPluginPath() и setPluginPathList().

[signal] void QQmlEngine::quit()

Этот сигнал испускается, когда загруженный в движок QML хочет завершить работу.

void QQmlEngine::removeImageProvider(const QString &providerId)

Удаляет поставщика изображений для providerId.

См. также addImageProvider() и QQuickImageProvider.

QQmlContext *QQmlEngine::rootContext() const

Возвращает корневой контекст движка.

Корневой контекст автоматически создаётся QQmlEngine. Данные, которые должны быть доступны всем экземплярам QML-компонентов, созданных движком, должны быть помещены в корневой контекст.

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

void QQmlEngine::setBaseUrl(const QUrl &url)

Устанавливает базовый URL для этого движка на url.

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

[static] void QQmlEngine::setContextForObject(QObject *object, QQmlContext *context)

Устанавливает QQmlContext для объекта object в значение context. Если у объекта object уже есть контекст, выводится предупреждение, но контекст не изменяется.

Когда QQmlEngine создает экземпляр QObject, контекст устанавливается автоматически.

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

void QQmlEngine::setImportPathList(const QStringList &paths)

Устанавливает paths как список каталогов, в которых движок ищет установленные модули в структуре каталогов на основе URL.

По умолчанию список содержит каталог исполняемого файла приложения, пути, указанные в переменной среды QML2_IMPORT_PATH, и встроенный Qml2ImportsPath из QLibraryInfo.

См. также importPathList() и addImportPath().

void QQmlEngine::setIncubationController(QQmlIncubationController *controller)

Устанавливает контроллер инкубации controller движка. Движок может иметь только один активный контроллер, и он не берет на себя его владение.

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

void QQmlEngine::setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory *factory)

Устанавливает factory для создания QNetworkAccessManager(ов).

QNetworkAccessManager используется для всех сетевых операций в QML. Реализация фабрики позволяет создавать настраиваемые QNetworkAccessManager со специализированной кэшированием, прокси и поддержкой cookie.

Фабрику необходимо установить до запуска движка.

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

[static] void QQmlEngine::setObjectOwnership(QObject *object, ObjectOwnership ownership)

Устанавливает ownership объекта object.

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

void QQmlEngine::setOutputWarningsToStandardError(bool enabled)

Устанавливает значение enabled, определяющее, будут ли сообщения об ошибках выводиться в stderr.

Если enabled равно true, любые сообщения об ошибках, сгенерированные QML, будут выводиться в stderr и передаваться сигналом warnings(). Если enabled равно false, будет испускаться только сигнал warnings(). Это позволяет приложениям самостоятельно обрабатывать вывод предупреждений.

Значение по умолчанию равно true.

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

void QQmlEngine::setPluginPathList(const QStringList &paths)

Устанавливает список каталогов, в которых движок ищет нативные плагины для импортируемых модулей (указанных в файле qmldir ) в paths.

По умолчанию список содержит только ., т.е. движок ищет в каталоге самого файла qmldir.

См. также pluginPathList() и addPluginPath().

void QQmlEngine::trimComponentCache()

Очищает кэш внутренних компонентов движка.

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

Компонент считается используемым, если существуют какие-либо экземпляры самого компонента, экземпляры других компонентов, использующих этот компонент, или любые объекты, созданные любыми из этих компонентов.

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

[signal] void QQmlEngine::warnings(const QList<QQmlError> &warnings)

Этот сигнал испускается, когда генерируются сообщения warnings в QML.

Связанные нечлены

QObject *qmlAttachedPropertiesObject(const QObject *attachee, bool create = true)

Форма этой шаблонной функции:

template<typename T> QObject *qmlAttachedPropertiesObject(const QObject *attachee, bool create = true)

Эта функция возвращает экземпляр прикреплённого объекта, который был прикреплён к указанному attachee типом T.

Если create равно true и тип T является допустимым типом прикрепления, эта функция создаёт и возвращает новый экземпляр прикреплённого объекта.

Возвращает 0, если тип T не является допустимым типом прикрепления или если create равно false, и ранее не был создан экземпляр прикреплённого объекта для attachee.

См. также Предоставление прикреплённых объектов для аннотаций данных.

void qmlClearTypeRegistrations()

Очищает все сохранённые регистрации типов, такие как те, что создаются с помощью qmlRegisterType().

Не вызывайте эту функцию, пока существует QQmlEngine, так как поведение будет неопределённым. Все существующие QQmlEngines должны быть удалены перед вызовом этой функции. Эта функция затрагивает только глобальный кэш приложения. Удалите QQmlEngine, чтобы очистить все кешированные данные, относящиеся к этому движку.

#include <QtQml>, чтобы использовать этот метод.

QQmlContext *qmlContext(const QObject *object)

Возвращает QQmlContext, связанный с object, если таковой имеется. Это эквивалентно QQmlEngine::contextForObject(object).

Примечание: Добавьте #include <QtQml> для использования этой функции.

См. также contextForObject() и qmlEngine().

QQmlEngine *qmlEngine(const QObject *object)

Возвращает QQmlEngine, связанный с object, если таковой имеется. Это эквивалентно QQmlEngine::contextForObject(object)->engine(), но более эффективно.

Примечание: Добавьте #include <QtQml> для использования этой функции.

См. также contextForObject() и qmlContext().

QQmlInfo QtQml::qmlInfo(const QObject *object)

Выводит сообщения об ошибках, которые включают имя файла и номер строки для указанного QML-объекта object.

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

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

Например,

qmlInfo(object) << tr("component property is a write-once property");

выводит

QML MyCustomType (unknown location): component property is a write-once property

bool qmlProtectModule(const char *uri, int majVersion)

Эта функция защищает модуль от регистрации типов в нём. Это может использоваться для предотвращения вставки типов другими плагинами в ваш модуль. Это также может улучшить производительность, так как позволяет движку пропустить проверку на возможность новых типов или плагинов при достижении этого импорта.

Преимущество в производительности в основном проявляется при регистрации прикладных типов из приложения, а не через плагин. Использование qmlProtectModule позволяет движку пропустить проверку плагина при импорте этого uri, что может быть заметно при медленных файловых системах.

После вызова этой функции любая попытка зарегистрировать C++ типы в эту комбинацию uri и версии приведёт к ошибке во время выполнения. Вызовите эту функцию после регистрации всех ваших типов в движке.

#include <QtQml>, чтобы использовать эту функцию.

Возвращает true, если был найден и заблокирован модуль с uri в качестве идентификатора модуля и majVersion как номер основной версии; в противном случае возвращает false. Модуль должен содержать экспортированные типы, чтобы быть найденным.

int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)

Эта шаблонная функция регистрирует C++ тип и его расширяющий объект в QML-системе с именем qmlName в библиотеке, импортируемой из uri, имеющей номер версии, составленный из versionMajor и versionMinor. Свойства, недоступные в основном типе, будут искаться в расширяющем объекте.

Возвращает идентификатор QML-типа.

#include <QtQml> для использования этой функции.

См. также qmlRegisterType() и Регистрация расширяющих объектов.

int qmlRegisterExtendedUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason)

Эта шаблонная функция регистрирует C++ тип и его расширение в системе QML с именем qmlName в библиотеке, импортируемой из uri, имеющей номер версии, составленный из versionMajor и versionMinor.

Хотя тип имеет имя и тип, он не может быть создан, и указанная ошибка reason возникнет при попытке создания.

Это полезно, когда тип предназначен только для предоставления прикрепленных свойств, значений перечислений или абстрактного базового класса со своим расширением.

Возвращает идентификатор QML-типа.

#include <QtQml> для использования этой функции.

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

int qmlRegisterInterface(const char *typeName)

Эта шаблонная функция регистрирует C++ тип в системе QML под именем typeName.

#include <QtQml> для использования этой функции.

Возвращает идентификатор QML-типа.

int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor)

Эта шаблонная функция регистрирует указанную версию C++ типа в системе QML с библиотекой, импортируемой из uri, имеющей номер версии, составленный из versionMajor и versionMinor.

Возвращает идентификатор QML-типа.

template<typename T, int metaObjectRevision>
int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor);

Эта функция обычно используется для регистрации ревизии базового класса для использования со специфицированной версией типа (см. Ревизии и версии типов).

int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, QJSValue(* ) ( QQmlEngine *, QJSEngine * ) callback)

Эта функция может быть использована для регистрации поставщика одиночного типа callback в конкретном uri и typeName с версией, указанной в versionMajor и versionMinor.

Установка одиночного типа позволяет разработчикам предоставлять произвольные функции (методы и свойства) клиенту без необходимости создания отдельных экземпляров типа клиентом.

Одиночный тип может быть либо QObject, либо QJSValue. Эта функция должна использоваться для регистрации функции поставщика одиночного типа, которая возвращает QJSValue как одиночный тип.

ПРИМЕЧАНИЕ: Свойства одиночного типа QJSValue не будут вызывать повторную оценку привязки при изменении.

Использование:

// First, define the singleton type provider function (callback).
static QJSValue example_qjsvalue_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
{
    Q_UNUSED(engine)

    static int seedValue = 5;
    QJSValue example = scriptEngine->newObject();
    example.setProperty("someProperty", seedValue++);
    return example;
}

// Second, register the singleton type provider with QML by calling this function in an initialization function.
#include <QtQml>
...
qmlRegisterSingletonType("Qt.example.qjsvalueApi", 1, 0, "MyApi", example_qjsvalue_singletontype_provider);
...

Для использования зарегистрированного одиночного типа в QML необходимо импортировать этот тип.

import QtQuick 2.0
import Qt.example.qjsvalueApi 1.0 as ExampleApi
Item {
    id: root
    property int someValue: ExampleApi.MyApi.someProperty
}

int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, QObject *(* ) ( QQmlEngine *, QJSEngine * ) callback)

Эта функция может быть использована для регистрации поставщика одиночного типа callback в конкретном uri и typeName с версией, указанной в versionMajor и versionMinor.

Установка одиночного типа в uri позволяет разработчикам предоставлять произвольные функции (методы и свойства) клиентам без необходимости создания отдельных экземпляров типа клиентом.

Одиночный тип может быть либо QObject, либо QJSValue. Эта функция должна использоваться для регистрации функции поставщика одиночного типа, которая возвращает QObject указанного типа T в качестве одиночного типа.

Одиночный тип QObject может быть указан по имени типа, с которым он был зарегистрирован, и это имя типа может быть использовано в качестве целевого объекта в типе Connections или иначе использоваться как любой другой идентификатор типа. Единственное исключение состоит в том, что свойство одиночного типа QObject не может быть алиасом (потому что имя одиночного типа не идентифицирует объект внутри того же компонента, что и любой другой элемент).

ПРИМЕЧАНИЕ: Экземпляр одиночного типа QObject, возвращённый поставщиком одиночного типа, принадлежит движку QML, если только для объекта явно не установлен флаг QQmlEngine::CppOwnership.

Использование:

// First, define your QObject which provides the functionality.
class SingletonTypeExample : public QObject
{
    Q_OBJECT
    Q_PROPERTY (int someProperty READ someProperty WRITE setSomeProperty NOTIFY somePropertyChanged)

public:
    SingletonTypeExample(QObject* parent = 0)
        : QObject(parent), m_someProperty(0)
    {
    }

    ~SingletonTypeExample() {}

    Q_INVOKABLE int doSomething() { setSomeProperty(5); return m_someProperty; }

    int someProperty() const { return m_someProperty; }
    void setSomeProperty(int val) { m_someProperty = val; emit somePropertyChanged(val); }

signals:
    void somePropertyChanged(int newValue);

private:
    int m_someProperty;
};

// Second, define the singleton type provider function (callback).
static QObject *example_qobject_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
{
    Q_UNUSED(engine)
    Q_UNUSED(scriptEngine)

    SingletonTypeExample *example = new SingletonTypeExample();
    return example;
}

// Third, register the singleton type provider with QML by calling this function in an initialization function.
#include <QtQml>
...
qmlRegisterSingletonType<SingletonTypeExample>("Qt.example.qobjectSingleton", 1, 0, "MyApi", example_qobject_singletontype_provider);
...

Для использования зарегистрированного одиночного типа в QML необходимо импортировать одиночный тип.

import QtQuick 2.0
import Qt.example.qobjectSingleton 1.0
Item {
    id: root
    property int someValue: MyApi.someProperty

    Component.onCompleted: {
        someValue = MyApi.doSomething()
    }
}

Поскольку одиночные типы не имеют связанного объекта QQmlContext, то в функциях типа, производного от QObject, зарегистрированного в качестве реализации одиночного типа, информация о контексте и движке QML недоступна. Функция QQmlEngine::contextForObject() возвращает NULL при передаче указателя на объект QObject, реализующий одиночный тип.

Расширение приведенного выше примера:

class SingletonTypeExample : public QObject
{
    ...

    Q_INVOKABLE void doSomethingElse()
    {
        // QML Engine/Context information is not accessible here:
        Q_ASSERT(QQmlEngine::contextForObject(this) == 0);
        Q_ASSERT(qmlContext(this) == 0);
        Q_ASSERT(qmlEngine(this) == 0);
    }

    ...
}

int qmlRegisterSingletonType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)

Эта функция может быть использована для регистрации одиночного типа с именем qmlName в библиотеке, импортированной из uri, имеющей номер версии, составленный из versionMajor и versionMinor. Тип определяется файлом QML, расположенным по адресу url. URL должен быть абсолютным, т.е. url.isRelative() == false.

Кроме того, файл QML типа должен иметь в своих операциях импорта оператор pragma Singleton.

Одиночный тип может быть указан по имени типа, с которым он был зарегистрирован, и это имя типа может быть использовано в качестве целевого объекта в типе Connections или иначе использоваться как любой другой идентификатор типа. Единственное исключение состоит в том, что свойство одиночного типа не может быть алиасом (потому что имя одиночного типа не идентифицирует объект внутри того же компонента, что и любой другой элемент).

Использование:

// First, define your QML singleton type which provides the functionality.
pragma Singleton
import QtQuick 2.0
Item {
    property int testProp1: 125
}
// Second, register the QML singleton type by calling this function in an initialization function.
#include <QtQml>
...
qmlRegisterSingletonType(QUrl("file:///absolute/path/SingletonType.qml"), "Qt.example.qobjectSingleton", 1, 0, "RegisteredSingleton");
...

Для использования зарегистрированного одиночного типа в QML необходимо импортировать одиночный тип.

import QtQuick 2.0
import Qt.example.qobjectSingleton 1.0
Item {
    id: root
    property int someValue: RegisteredSingleton.testProp1
}

Также возможно регистрация одиночных типов QML без использования функции qmlRegisterSingletonType. Это можно сделать, добавив оператор pragma Singleton в операциях импорта файла QML типа. Кроме того, тип должен быть определён в файле qmldir со словом singleton, а qmldir должен быть импортирован файлами QML, использующими singleton.

int qmlRegisterType()

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

Эта шаблонная функция регистрирует тип C++ в системе QML. Экземпляры этого типа не могут быть созданы из системы QML.

#include <QtQml> для использования этой функции.

Возвращает идентификатор типа QML.

int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)

Эта шаблонная функция регистрирует тип C++ в системе QML с именем qmlName в библиотеке, импортированной из uri, имеющей номер версии, составленный из versionMajor и versionMinor.

Возвращает идентификатор типа QML.

Существуют два варианта этой шаблонной функции:

template<typename T>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);

template<typename T, int metaObjectRevision>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);

Первый — это стандартная форма, которая регистрирует тип T как новый тип. Второй позволяет зарегистрировать конкресную версию класса в указанной версии (см. Ревизии и версии типов).

Например, это регистрирует класс C++ MySliderItem как тип QML с именем Slider для версии 1.0 пространства имён типа "com.mycompany.qmlcomponents":

#include <QtQml>

...

qmlRegisterType<MySliderItem>("com.mycompany.qmlcomponents", 1, 0, "Slider");

После регистрации тип можно использовать в QML, импортировав указанное пространство имён типа и номер версии:

import com.mycompany.qmlcomponents 1.0

Slider {
    // ...
}

Обратите внимание, что вполне разумно, чтобы библиотека регистрировала типы в более ранних версиях, чем фактическая версия библиотеки. Действительно, обычно новая библиотека позволяет работать QML, написанному для предыдущих версий, даже если доступны более продвинутые версии некоторых её типов.

int qmlRegisterType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)

Эта функция регистрирует тип в системе QML с именем qmlName в библиотеке, импортированной из uri, имеющей номер версии, составленный из versionMajor и versionMinor. Тип определяется файлом QML, расположенным по адресу url. URL должен быть абсолютным, т.е. url.isRelative() == false.

Обычно файлы QML могут загружаться как типы непосредственно из других файлов QML или с использованием файла qmldir. Эта функция позволяет регистрировать файлы типов из кода C++, например, когда отображение типов необходимо определять процедурно при запуске.

#include <QtQml> для использования этой функции.

Возвращает -1, если регистрация не удалась.

int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &message)

Эта функция регистрирует тип в системе QML с именем qmlName в пространстве имён типа, импортированном из uri, имеющем номер версии, составленный из versionMajor и versionMinor, но любая попытка создать тип выведет заданную ошибку message.

Обычно типы, экспортируемые плагином, должны быть неизменными. Однако, если тип C++ недоступен, вы должны по крайней мере «зарезервировать» имя QML типа и дать пользователю недоступного типа понятное сообщение об ошибке.

Возвращает идентификатор типа QML.

Пример:

#ifdef NO_GAMES_ALLOWED
qmlRegisterTypeNotAvailable("MinehuntCore", 0, 1, "Game", "Get back to work, slacker!");
#else
qmlRegisterType<MinehuntGame>("MinehuntCore", 0, 1, "Game");
#endif

Это заставит любой QML, который импортирует пространство имён типа "MinehuntCore" и пытается использовать тип, вывести сообщение об ошибке:

fun.qml: Get back to work, slacker!
   Game {
   ^

Без этого будет выведено общее сообщение «Игра — не тип».

#include <QtQml> для использования этой функции.

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

int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &message)

Эта шаблонная функция регистрирует тип C++ в системе QML с именем qmlName в библиотеке, импортированной из uri, имеющей номер версии, составленный из versionMajor и versionMinor.

Хотя у типа есть имя и тип, он не может быть создан, и заданное сообщение об ошибке message будет получено, если попытка создания будет предпринята.

Это полезно в ситуациях, когда тип предназначен только для предоставления присоединённых свойств или значений перечислений.

Возвращает идентификатор типа QML.

#include <QtQml> для использования этой функции.

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

Документация по макросам

QML_DECLARE_TYPE()

Эквивалентно Q_DECLARE_METATYPE(TYPE *) и Q_DECLARE_METATYPE(QQmlListProperty<TYPE>)

#include <QtQml> для использования этого макроса.

QML_DECLARE_TYPEINFO(Type, Flags)

Объявляет дополнительные свойства заданного типа Type, как описано в указанных флагах Flags.

В настоящее время единственный поддерживаемый тип информации — QML_HAS_ATTACHED_PROPERTIES , который объявляет, что тип Type поддерживает присоединённые свойства.

#include <QtQml> для использования этого макроса.

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

Spec-Zone.ru

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