Spec-Zone.ru › Qt 5.11

Класс QQmlEngine

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

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

QQmlApplicationEngine

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

Типы public

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

Свойства

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

Public Функции

QQmlEngine(QObject *parent = nullptr)
virtual ~QQmlEngine() override
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 offlineStorageDatabaseFilePath(const QString &databaseName) 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()
  • 11 public функций унаследовано от QJSEngine
  • 34 public функций унаследовано от QObject

Public слоты

void перевестиЗаново()
  • 1 public слот, унаследованный от QObject

Сигналы

void выход(int retCode)
void выйти()
void предупреждения(const QList<QQmlError> &warnings)
  • 2 сигнала, унаследованные от QObject

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

QQmlContext * контекстДляОбъекта(const QObject *object)
QQmlEngine::ObjectOwnership владениеОбъектом(QObject *object)
void установитьКонтекстДляОбъекта(QObject *object, QQmlContext *context)
void установитьВладениеОбъектом(QObject *object, QQmlEngine::ObjectOwnership ownership)
  • 10 статических публичных членов, унаследованных от QObject

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

virtual bool событие(QEvent *e) override
  • 9 защищенных функций, унаследованных от QObject

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

QObject * qmlAttachedPropertiesObject(const QObject *attachee, bool create = ...)
void qmlClearTypeRegistrations()
QQmlContext * qmlContext(const QObject *object)
QQmlEngine * qmlEngine(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)
void qmlRegisterModule(const char *uri, int versionMajor, int versionMinor)
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 qmlRegisterUncreatableMetaObject(const QMetaObject &staticMetaObject, const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason)
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 переменная, унаследованная от QObject
  • 9 protected функций, унаследованных от QObject
  • 2 protected переменных, унаследованных от 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.

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

перечисление 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 и другие автономные данные.

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

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

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

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

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

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

QQmlEngine::QQmlEngine(QObject *parent = nullptr)

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

[override 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 в качестве каталога, в котором движок ищет нативные плагины для импортированных модулей (ссылка на которые содержится в файле qmldir).

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

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

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

QUrl QQmlEngine::baseUrl() const

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

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

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

void QQmlEngine::clearComponentCache()

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

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

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

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

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

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

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

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

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

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

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

[signal] void QQmlEngine::exit(int retCode)

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

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

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

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/. Для определения сопоставления версий типов и, возможно, плагинов QML-расширений требуется файл qmldir.

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

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

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

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

При ошибке и если errors не равен нулю, список 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] QQmlEngine::ObjectOwnership QQmlEngine::objectOwnership(QObject *object)

Возвращает владение объектом object.

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

QString QQmlEngine::offlineStorageDatabaseFilePath(const QString &databaseName) const

Возвращает путь к файлу базы данных Local Storage с идентификатором databaseName (или где она будет расположена).

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

См. также LocalStorage.openDatabaseSync().

bool QQmlEngine::outputWarningsToStandardError() const

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

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

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

QStringList QQmlEngine::pluginPathList() const

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

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

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

[signal] void QQmlEngine::quit()

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

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

END_OF_DOCUMENT_MARKER

void QQmlEngine::removeImageProvider(const QString &providerId)

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

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

[slot] void QQmlEngine::retranslate()

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

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

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

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

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 со специализированной кэшированием, прокси и поддержкой куки.

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

Примечание: QQmlEngine не принимает владения фабрикой.

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

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

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

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

void QQmlEngine::setOutputWarningsToStandardError(bool enabled)

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

Если 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 = ...)

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

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, чтобы очистить все кэшированные данные, относящиеся к этому движку.

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().

bool qmlProtectModule(const char *uri, int majVersion)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

int qmlRegisterInterface(const char *typeName)

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

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

void qmlRegisterModule(const char *uri, int versionMajor, int versionMinor)

Эта функция регистрирует модуль в определённом uri с версией, указанной в versionMajor и versionMinor.

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

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

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.
qmlRegisterSingletonType("Qt.example.qjsvalueApi", 1, 0, "MyApi", example_qjsvalue_singletontype_provider);

В качестве альтернативы, вы можете использовать лямбда-функцию C++11:

qmlRegisterSingletonType("Qt.example.qjsvalueApi", 1, 0, "MyApi", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QJSValue {
    Q_UNUSED(engine)

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

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

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

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

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 может ссылаться через имя типа, с которым он был зарегистрирован, и это имя типа может использоваться в качестве цели в типе Подключения или в противном случае использоваться как любой другой идентификатор типа. Одно исключение из этого – свойство 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.
qmlRegisterSingletonType<SingletonTypeExample>("Qt.example.qobjectSingleton", 1, 0, "MyApi", example_qobject_singletontype_provider);

В качестве альтернативы можно использовать лямбда-выражение C++11:

qmlRegisterSingletonType<SingletonTypeExample>("Qt.example.qjsvalueApi", 1, 0, "MyApi", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
    Q_UNUSED(engine)
    Q_UNUSED(scriptEngine)

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

Для использования зарегистрированного типа синглтона в 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);
    }

    ...
}

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

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.

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

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

// 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.
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. Это можно сделать, добавив в импорты файла QML типа инструкцию pragma Singleton. Кроме того, тип должен быть определен в файле qmldir со словом singleton, а файл qmldir должен импортироваться файлами QML, использующими синглтон.

int qmlRegisterType()

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

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

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

Например, рассмотрим следующие два класса:

class Bar : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString baz READ baz WRITE setBaz NOTIFY bazChanged)

public:
    Bar() {}

    QString baz() const { return mBaz; }

    void setBaz(const QString &baz)
    {
        if (baz == mBaz)
            return;

        mBaz = baz;
        emit bazChanged();
    }

signals:
    void bazChanged();

private:
    QString mBaz;
};

class Foo : public QObject
{
    Q_OBJECT
    Q_PROPERTY(Bar *bar READ bar CONSTANT FINAL)

public:
    Foo() {}

    Bar *bar() { return &mBar; }

private:
    Bar mBar;
};

В QML мы присваиваем строку свойству baz типа bar:

Foo {
    bar.baz: "abc"
    Component.onCompleted: print(bar.baz)
}

Для того, чтобы движок QML знал, что тип Bar имеет свойство baz, мы должны сделать тип Bar известным:

qmlRegisterType<Foo>("App", 1, 0, "Foo");
qmlRegisterType<Bar>();

Поскольку тип Foo экземпляризован в QML, он должен быть зарегистрирован с помощью версии qmlRegisterType(), которая принимает URI импорта.

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

См. также Выбор правильного метода интеграции между C++ и 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":

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

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

import com.mycompany.qmlcomponents 1.0

Slider {
    // ...
}

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

См. также Выбор правильного метода интеграции между C++ и 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++, например, когда отображение типов необходимо определять процедурно при запуске.

Возвращает -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 {
   ^

Без этого было бы выведено общее сообщение "Game не является типом".

См. также qmlRegisterUncreatableType() и Выбор правильного метода интеграции между C++ и QML.

int qmlRegisterUncreatableMetaObject(const QMetaObject &staticMetaObject, const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason)

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

Экземпляр метаобъекта создать нельзя. При попытке создания будет выведено сообщение об ошибке с указанной reason.

Эта функция полезна для регистрации пространств имён Q_NAMESPACE.

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

Например:

namespace MyNamespace {
  Q_NAMESPACE
  enum MyEnum {
      Key1,
      Key2,
  };
  Q_ENUMS(MyEnum)
}

//...
qmlRegisterUncreatableMetaObject(MyNamespace::staticMetaObject, "io.qt", 1, 0, "MyNamespace", "Access to enums & flags only");

Теперь в QML можно использовать зарегистрированные перечисления:

Component.onCompleted: console.log(MyNamespace.Key2)

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

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

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

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

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

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

См. также qmlRegisterTypeNotAvailable() и Выбор правильного метода интеграции между C++ и QML.

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

QML_DECLARE_TYPE

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

QML_DECLARE_TYPEINFO(Type, Flags)

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

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

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

Spec-Zone.ru

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