Класс QQmlEngine
Класс QQmlEngine предоставляет среду для создания экземпляров компонентов QML. Подробнее...
| Заголовок: | #include <QQmlEngine> |
| qmake: | QT += qml |
| С момента: | Qt 5.0 |
| Наследует: | QJSEngine |
| Наследуется от: |
Этот класс был представлен в Qt 5.0.
Типы публичного доступа
| Перечисление | ObjectOwnership { CppOwnership, JavaScriptOwnership } |
Свойства
- offlineStoragePath : QString
Публичные функции
| 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) |
| T | singletonInstance(int qmlTypeId) |
| void | trimComponentCache() |
Public Slots
| void | перевести() |
Signals
| void | exit(int retCode) |
| void | quit() |
| void | warnings(const QList<QQmlError> &warnings) |
Static Public Members
| QQmlContext * | contextForObject(const QObject *object) |
| QQmlEngine::ObjectOwnership | objectOwnership(QObject *object) |
| void | setContextForObject(QObject *object, QQmlContext *context) |
| void | setObjectOwnership(QObject *object, QQmlEngine::ObjectOwnership ownership) |
Reimplemented Protected Functions
| virtual bool | event(QEvent *e) override |
Related Non-Members
| QObject * | qmlAttachedPropertiesObject(const QObject *attachee, bool create = true) |
| void | qmlClearTypeRegistrations() |
| QQmlContext * | qmlContext(const QObject *object) |
| QQmlEngine * | qmlEngine(const QObject *object) |
| bool | qmlProtectModule(const char *uri, int majVersion) |
| int | qmlRegisterAnonymousType(const char *uri, int versionMajor) |
| 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(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) |
| int | qmlTypeId(const char *uri, int versionMajor, int versionMinor, const char *qmlName) |
Макросы
| QML_DECLARE_TYPE | |
| QML_DECLARE_TYPEINFO(Type, Flags) |
Подробное описание
Каждый компонент 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.
См. также 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.
[signal] void QQmlEngine::exit(int retCode)
Этот сигнал излучается, когда QML, загруженный движком, хочет выйти из цикла событий со значением возврата retCode.
Эта функция была введена в Qt 5.8.
См. также quit().
[signal] void QQmlEngine::quit()
Этот сигнал излучается, когда QML, загруженный движком, хочет выйти.
См. также exit().
[slot] void QQmlEngine::retranslate()
Обновляет все выражения привязки, использующие строки, помеченные для перевода.
Вызывайте эту функцию после установки нового переводчика с помощью QCoreApplication::installTranslator, чтобы гарантировать, что ваш пользовательский интерфейс отображает актуальные переводы.
Примечание: Из-за ограничения в реализации эта функция обновляет все привязки движка, а не только те, которые используют строки, помеченные для перевода. Это может быть оптимизировано в будущих релизах.
Эта функция была представлена в Qt 5.10.
[signal] void QQmlEngine::warnings(const QList<QQmlError> &warnings)
Этот сигнал испускается, когда сообщения warnings генерируются QML.
[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, если контекст не был задан.
Когда QQmlEngine инициализирует QObject, контекст устанавливается автоматически.
См. также setContextForObject(), qmlContext() и qmlEngine().
[override virtual protected] bool QQmlEngine::event(QEvent *e)
Переопределяет: QObject::event(QEvent *e).
QQmlImageProviderBase *QQmlEngine::imageProvider(const QString &providerId) const
Возвращает поставщика изображений, установленного для providerId, если найден; в противном случае возвращает nullptr.
См. также 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] QQmlEngine::ObjectOwnership QQmlEngine::objectOwnership(QObject *object)
Возвращает владение object.
См. также setObjectOwnership().
QString QQmlEngine::offlineStorageDatabaseFilePath(const QString &databaseName) const
Возвращает путь к файлу, где находится (или должен быть) база данных Локального хранилища с идентификатором databaseName.
Эта функция была представлена в Qt 5.9.
См. также LocalStorage.openDatabaseSync().
bool QQmlEngine::outputWarningsToStandardError() const
Возвращает true, если сообщения об ошибках будут выведены в stderr дополнительно к сигналу warnings(), в противном случае false.
Значение по умолчанию равно true.
См. также setOutputWarningsToStandardError().
END_OF_DOCUMENT_MARKERQStringList QQmlEngine::pluginPathList() const
Возвращает список каталогов, где движок ищет родные плагины для импортированных модулей (указанных в файле qmldir).
По умолчанию список содержит только ., то есть движок ищет в каталоге самого файла qmldir.
См. также addPluginPath() и setPluginPathList().
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.
Фабрика должна быть установлена перед запуском движка.
Примечание: 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().
T QQmlEngine::singletonInstance(int qmlTypeId)
Возвращает экземпляр одиночного типа, зарегистрированного под qmlTypeId.
Шаблонный аргумент T может быть либо QJSValue, либо указателем на тип, производный от QObject, и зависит от того, как был зарегистрирован одиночный тип. Если экземпляр T ещё не создан, он создаётся сейчас. Если qmlTypeId не соответствует ни одному зарегистрированному одиночному типу, возвращается либо QJSValue по умолчанию, либо nullptr.
Пример с QObject:
class MySingleton : public QObject {
Q_OBJECT
static int typeId;
// ...
};
// Register with QObject* callback
MySingleton::typeId = qmlRegisterSingletonType<MySingleton>(...);
// Retrieve as QObject*
QQmlEngine engine;
MySingleton* instance = engine.singletonInstance<MySingleton*>(MySingleton::typeId); Пример с QJSValue:
// Register with QJSValue callback int typeId = qmlRegisterSingletonType(...); // Retrieve as QJSValue QQmlEngine engine; QJSValue instance = engine.singletonInstance<QJSValue>(typeId);
Рекомендуется хранить идентификатор типа QML при регистрации, например, как статический член в классе одиночного типа. В противном случае, дорогостоящий поиск через qmlTypeId() должен выполняться во время выполнения.
Эта функция была добавлена в Qt 5.12.
См. также qmlRegisterSingletonType() и qmlTypeId().
void QQmlEngine::trimComponentCache()
Очищает внутренний кэш компонентов движка.
Эта функция приводит к уничтожению метаданных свойств загруженных компонентов, которые в данный момент не используются.
Компонент считается используемым, если существуют какие-либо экземпляры самого компонента, экземпляры других компонентов, использующих данный компонент, или любые объекты, созданные этими компонентами.
См. также clearComponentCache().
END_OF_DOCUMENT_MARKERСвязанные нечлены
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, чтобы очистить все кэшированные данные, относящиеся к этому движку.
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, major версии приведёт к ошибке во время выполнения. Вызовите эту функцию после регистрации всех ваших типов в движке.
Возвращает true, если модуль с uri в качестве идентификатора модуля и majVersion в качестве номера основной версии был найден и заблокирован, в противном случае возвращает false. Модуль должен содержать экспортированные типы, чтобы быть найденным.
int qmlRegisterAnonymousType(const char *uri, int versionMajor)
Эта шаблонная функция регистрирует тип C++ в системе QML как анонимный тип. Результирующий тип QML не имеет имени. Поэтому экземпляры этого типа не могут быть созданы из системы QML. Однако вы можете получить доступ к экземплярам типа, когда они экспонированы как свойства других типов.
Используйте эту функцию, когда тип не будет ссылаться по имени, в частности для типов C++, используемых в левой части привязки свойств.
Для указания модуля, к которому принадлежит тип, используйте uri и versionMajor.
Например, рассмотрим следующие два класса:
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");
qmlRegisterAnonymousType<Bar>("App", 1); Поскольку тип Foo создаётся в QML, его необходимо зарегистрировать с помощью версии qmlRegisterType(), которая принимает имя элемента.
Возвращает идентификатор типа QML.
Эта функция была представлена в Qt 5.14.
См. также Выбор правильного метода интеграции между C++ и QML.
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.
Типы, зарегистрированные как интерфейсы в движке, также должны объявлять себя как интерфейсы с помощью системы метаобъектов. Например:
struct FooInterface
{
public:
virtual ~FooInterface();
virtual void doSomething() = 0;
};
Q_DECLARE_INTERFACE(FooInterface, "org.foo.FooInterface") При регистрации в движке QML таким образом, они могут использоваться в качестве типов свойств:
Q_PROPERTY(FooInterface *foo READ foo WRITE setFoo)
Когда вы присваиваете подкласс QObject этому свойству, движок QML выполняет приведение интерфейса к типу FooInterface* автоматически.
Возвращает идентификатор типа 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 может быть вызван по имени типа, с которым он был зарегистрирован, и это имя типа может использоваться в качестве цели в типе 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.
qmlRegisterSingletonType<SingletonTypeExample>("Qt.example.qobjectSingleton", 1, 0, "MyApi", example_qobject_singletontype_provider); В качестве альтернативы, вы можете использовать лямбда-выражение C++11:
qmlRegisterSingletonType<SingletonTypeExample>("Qt.example.qobjectSingleton", 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()
}
} См. также Выбор правильного метода интеграции между 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-адресом, т.е. 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.
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, использующими синглтон.
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-адресом, т.е. 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 {
^ Без этого было бы выдано общее сообщение об ошибке «Игра не является типом».
См. также 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.
int qmlTypeId(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
Возвращает идентификатор QML типа типа, зарегистрированного с именем qmlName в определённом uri и версии, указанной в versionMajor и versionMinor.
Эта функция возвращает то же значение, что и функции регистрации типов QML, такие как qmlRegisterType() и qmlRegisterSingletonType().
Если qmlName, uri и versionMajor соответствуют зарегистрированному типу, но указанная в versionMinor младшая версия больше, то возвращается идентификатор типа с ближайшей младшей версией.
Возвращает -1, если соответствующий тип не найден или один из переданных параметров некорректен.
Функция была добавлена в Qt 5.12.
См. также qmlRegisterType() и qmlRegisterSingletonType().
Документация макросов
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/qt-5.14/qqmlengine.html