Spec-Zone.ru › Qt 6.0

Класс QQmlEngine

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

Заголовок: #include <QQmlEngine>
CMake: find_package(Qt6 COMPONENTS Qml REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
С тех пор: Qt 5.0
Наследуется от: QJSEngine
Наследуется в:

QQmlApplicationEngine

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

Свойства

  • 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)
void addUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor)
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
QUrl interceptUrl(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type) 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)
void removeUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor)
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()

Открытые слоты

void retranslate()

Сигналы

void exit(int retCode)
void quit()
void warnings(const QList<QQmlError> &warnings)

Статические открытые члены

QQmlContext * contextForObject(const QObject *object)
void setContextForObject(QObject *object, QQmlContext *context)

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

virtual bool event(QEvent *e) override

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

QObject * qmlAttachedPropertiesObject(const QObject *attachee, bool create = true)
void qmlClearTypeRegistrations()
QQmlContext * qmlContext(const QObject *object)
QQmlInfo qmlDebug(const QObject *object)
QQmlEngine * qmlEngine(const QObject *object)
QQmlInfo qmlInfo(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)
void qmlRegisterModule(const char *uri, int versionMajor, int versionMinor)
int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor)
int qmlRegisterSingletonInstance(const char *uri, int versionMajor, int versionMinor, const char *typeName, QObject *cppObject)
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 char *uri, int versionMajor, int versionMinor, const char *typeName, std::function<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)
QQmlInfo qmlWarning(const QObject *object)

Макросы

QML_ADDED_IN_MINOR_VERSION(VERSION)
QML_ANONYMOUS
QML_ATTACHED(ATTACHED_TYPE)
QML_DECLARE_TYPE
QML_DECLARE_TYPEINFO(Type, Flags)
QML_ELEMENT
QML_EXTENDED(EXTENDED_TYPE)
QML_EXTENDED_NAMESPACE(EXTENDED_NAMESPACE)
QML_FOREIGN(FOREIGN_TYPE)
QML_FOREIGN_NAMESPACE(FOREIGN_NAMESPACE)
QML_IMPLEMENTS_INTERFACES(interfaces)
QML_INTERFACE
QML_NAMED_ELEMENT(name)
QML_REMOVED_IN_MINOR_VERSION(VERSION)
QML_SINGLETON
QML_UNAVAILABLE
QML_UNCREATABLE(reason)

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

Каждый 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-глобальный объект.

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

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, since 5.8] void QQmlEngine::exit(int retCode)

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

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

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

[signal] void QQmlEngine::quit()

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

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

[slot, since 5.10] 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().

void QQmlEngine::addUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor)

Добавляет urlInterceptor, используемый при разрешении URL в QML. Это также относится к URL, используемым для загрузки файлов скриптов и типов QML. Интерцепторы URL не должны изменяться во время загрузки файлов движком, иначе выбор URL может быть несогласованным. Несколько интерцепторов URL, при наличии, будут вызваны в порядке их добавления для каждого URL.

QQmlEngine не принимает владение интерцептором и не будет его удалять.

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, реализующим интерфейс QQmlEngineExtensionPlugin.

QQmlIncubationController *QQmlEngine::incubationController() const

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

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

QUrl QQmlEngine::interceptUrl(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type) const

Выполняет текущие интерцепторы URL для данного url заданного типа type и возвращает результат.

QNetworkAccessManager *QQmlEngine::networkAccessManager() const

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

END_OF_DOCUMENT_MARKER

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

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

QQmlNetworkAccessManagerFactory *QQmlEngine::networkAccessManagerFactory() const

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

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

[since 5.9] 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().

void QQmlEngine::removeImageProvider(const QString &providerId)

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

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

void QQmlEngine::removeUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor)

Удаляет urlInterceptor, ранее добавленный с помощью addUrlInterceptor. URL-интерцепторы не должны изменяться во время загрузки файлов движком, иначе выбор URL может быть несогласованным.

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

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

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

[since 5.12] template <typename T> T QQmlEngine::singletonInstance(int qmlTypeId)

Возвращает экземпляр типа singleton, зарегистрированного под qmlTypeId.

Шаблонный аргумент T может быть либо QJSValue, либо указателем на тип, производный от QObject, и зависит от того, как был зарегистрирован singleton. Если экземпляр T ещё не создан, он создаётся сейчас. Если qmlTypeId не представляет допустимый тип singleton, возвращается либо QJSValue по умолчанию, либо nullptr.

Пример с QObject:

class MySingleton : public QObject {
  \Q_OBJECT

  // Register as default constructed singleton.
  QML_ELEMENT
  QML_SINGLETON

  static int typeId;
  // ...
};

MySingleton::typeId = qmlTypeId(...);

// 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, например, в качестве статического члена в классе singleton. Поиск по qmlTypeId() дорогостоящий.

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

См. также QML_SINGLETON, qmlRegisterSingletonType(), и qmlTypeId().

void QQmlEngine::trimComponentCache()

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

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

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

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

END_OF_DOCUMENT_MARKER

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

template <typename T> 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.

См. также QML_ATTACHED() и Обеспечение присоединённых свойств.

void qmlClearTypeRegistrations()

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

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

QQmlContext *qmlContext(const QObject *object)

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

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

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

[since 5.9] QQmlInfo qmlDebug(const QObject *object)

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

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

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

qmlDebug(object) << "Internal state: 42";

выводит

QML MyCustomType (unknown location): Internal state: 42

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

См. также qmlInfo и qmlWarning.

QQmlEngine *qmlEngine(const QObject *object)

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

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

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

QQmlInfo qmlInfo(const QObject *object)

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

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

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

Например,

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

выводит

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

Примечание: В версиях до Qt 5.9 qmlInfo сообщал сообщения, используя предупреждение QtMsgType. В Qt 5.9 и выше qmlInfo использует информацию QtMsgType. Для отправки предупреждений используйте qmlWarning.

См. также qmlDebug и qmlWarning.

bool qmlProtectModule(const char *uri, int majVersion)

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

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

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

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

[since 5.14] template <typename T> 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.

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

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

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

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

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

template <typename T, typename E> int qmlRegisterExtendedUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason)

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

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

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

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

См. также QML_EXTENDED(), QML_UNCREATABLE() и qmlRegisterUncreatableType().

[since 5.9] void qmlRegisterModule(const char *uri, int versionMajor, int versionMinor)

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

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

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

template <typename T, int metaObjectRevision> 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);

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

[since 5.14] int qmlRegisterSingletonInstance(const char *uri, int versionMajor, int versionMinor, const char *typeName, QObject *cppObject)

Эта функция используется для регистрации одиночного объекта cppObject с определённым uri и typeName. Его версия — комбинация versionMajor и versionMinor.

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

Используйте эту функцию для регистрации объекта заданного типа T в качестве одиночного типа.

Тип одиночки QObject может быть указан по имени типа, с которым он был зарегистрирован; в свою очередь, это имя типа может использоваться в качестве целевого объекта в типе Соединений или как любой другой идентификатор типа. Однако существует одно исключение: свойство типа одиночки QObject не может быть алиасом, так как имя типа одиночки не идентифицирует объект внутри того же компонента, что и любой другой элемент.

Примечание: cppObject должен существовать дольше, чем движок QML, в котором он используется. Кроме того, cppObject должен иметь ту же привязку к потоку, что и движок. Если вам нужны отдельные экземпляры одиночки для нескольких движков, вам нужно использовать qmlRegisterSingletonType. Дополнительную информацию о потоковой безопасности см. в разделе Потоки и QObjects.

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

// 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:
    explicit SingletonTypeExample(QObject* parent = nullptr) : QObject(parent) {}

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

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

signals:
    void somePropertyChanged(int newValue);

private:
    int m_someProperty = 0;
};
// Second, create an instance of the object

// allocate example before the engine to ensure that it outlives it
QScopedPointer<SingletonTypeExample> example(new SingletonTypeExample);
QQmlEngine engine;

// Third, register the singleton type provider with QML by calling this
// function in an initialization function.
qmlRegisterSingletonInstance("Qt.example.qobjectSingleton", 1, 0, "MyApi", example.get());

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

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

    Component.onCompleted: {
        console.log(MyApi.doSomething())
    }
}

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

См. также QML_SINGLETON и qmlRegisterSingletonType.

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
}

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

template <typename T> 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.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()
    }
}

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

[since 5.14] template <typename T> int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, std::function<QObject *(QQmlEngine *, QJSEngine *)> callback)

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

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

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 среди директив импорта.

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

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

// 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, использующими одиночку.

См. также QML_SINGLETON.

template <typename T> 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, написанному для предыдущих версий, продолжать работать, даже если доступны более новые версии некоторых её типов.

См. также QML_ELEMENT, QML_NAMED_ELEMENT() и Выбор правильного метода интеграции между 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 {
   ^

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

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

[since 5.8] 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.

См. также QML_ELEMENT, QML_NAMED_ELEMENT() и QML_UNCREATABLE().

template <typename T> int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &message)

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

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

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

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

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

[since 5.12] 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.

См. также QML_ELEMENT, QML_NAMED_ELEMENT, QML_SINGLETON, qmlRegisterType() и qmlRegisterSingletonType().

[since 5.9] QQmlInfo qmlWarning(const QObject *object)

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

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

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

Например,

qmlInfo(object) << tr("property cannot be set to 0");

выводит

QML MyCustomType (unknown location): property cannot be set to 0

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

См. также qmlDebug и qmlInfo.

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

QML_ADDED_IN_MINOR_VERSION(VERSION)

Объявляет, что окружающий тип или пространство имён были добавлены в указанную малую VERSION, относительно основной версии модуля. Малая версия предполагается соответствующей любым ревизиям, заданным макросами Q_REVISION() для методов, слотов или сигналов, а также любым тегам REVISION для свойств, объявленных с макросом Q_PROPERTY().

QML_ADDED_IN_MINOR_VERSION() срабатывает только в том случае, если тип или пространство имён доступны в QML, имея макрос QML_ELEMENT, QML_NAMED_ELEMENT(), QML_ANONYMOUS или QML_INTERFACE.

Если QML-модуль, к которому принадлежит тип, импортирован с более низкой версией, чем определённая таким образом, QML-тип будет невидим.

См. также QML_ELEMENT и QML_NAMED_ELEMENT().

QML_ANONYMOUS

Объявляет, что окружающий тип доступен, но анонимный в QML. Тип нельзя создать или использовать как тип свойства, но при передаче из C++ он распознаётся.

См. также QML_ELEMENT, QML_NAMED_ELEMENT(), QML_UNCREATABLE() и QML_INTERFACE.

QML_ATTACHED(ATTACHED_TYPE)

Объявляет, что окружающий тип присоединяет ATTACHED_TYPE как присоединённое свойство к другим типам. Это срабатывает, если тип экспонируется в QML с помощью макроса QML_ELEMENT или QML_NAMED_ELEMENT().

См. также QML_ELEMENT, QML_NAMED_ELEMENT(), qmlAttachedPropertiesObject() и Предоставление присоединённых свойств.

QML_DECLARE_TYPE

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

QML_DECLARE_TYPEINFO(Type, Flags)

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

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

QML_ELEMENT

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

Например, это делает C++ класс Slider доступным как QML-тип с именем Slider.

class Slider : public QObject
{
    Q_OBJECT
    QML_ELEMENT
    ...
}

Вы можете использовать систему сборки для регистрации типа в пространстве имён типов com.mycompany.qmlcomponents с основной версией 1, указав следующее в файле проекта:

CONFIG += qmltypes
QML_IMPORT_NAME = com.mycompany.qmlcomponents
QML_IMPORT_MAJOR_VERSION = 1

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

import com.mycompany.qmlcomponents 1.0

Slider {
    // ...
}

Вы также можете сделать пространства имён, помеченные макросом Q_NAMESPACE, доступными таким образом, чтобы экспонировать все перечисления, помеченные макросом Q_ENUM_NS, которые они содержат.

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

QML_EXTENDED(EXTENDED_TYPE)

Объявляет, что окружающий тип использует EXTENDED_TYPE в качестве расширения для обеспечения дополнительных свойств, методов и перечислений в QML. Это срабатывает, если тип экспонируется в QML с помощью макроса QML_ELEMENT или QML_NAMED_ELEMENT().

См. также QML_ELEMENT, QML_NAMED_ELEMENT(), QML_EXTENDED_NAMESPACE() и Регистрация объектов расширения.

QML_EXTENDED_NAMESPACE(EXTENDED_NAMESPACE)

Объявляет, что окружающий тип использует EXTENDED_NAMESPACE в качестве расширения для обеспечения дополнительных перечислений в QML. Это срабатывает, если тип экспонируется в QML с помощью макроса QML_ELEMENT или QML_NAMED_ELEMENT().

См. также QML_ELEMENT, QML_NAMED_ELEMENT(), QML_EXTENDED() и Регистрация объектов расширения.

QML_FOREIGN(FOREIGN_TYPE)

Объявляет, что любые макросы QML_ELEMENT, QML_NAMED_ELEMENT(), QML_ANONYMOUS, QML_INTERFACE, QML_UNCREATABLE(), QML_SINGLETON, QML_ADDED_IN_MINOR_VERSION(), QML_REMOVED_IN_MINOR_VERSION(), QML_ATTACHED(), QML_EXTENDED() или QML_EXTENDED_NAMESPACE() в окружающем C++ типе не применяются к окружающему типу, а вместо этого к FOREIGN_TYPE. Окружающему типу всё ещё необходимо зарегистрироваться в системе мета-объектов с помощью макроса Q_GADGET или Q_OBJECT.

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

ПРИМЕЧАНИЕ: Возможно, вам следует использовать QML_NAMED_ELEMENT() вместо QML_ELEMENT, так как элемент будет именоваться как структура, в которой он находится, а не как внешний тип. См. Пример QML - объекты расширения для примера.

См. также QML_ELEMENT, QML_NAMED_ELEMENT() и QML_FOREIGN_NAMESPACE().

QML_FOREIGN_NAMESPACE(FOREIGN_NAMESPACE)

Объявляет, что любые макросы QML_ELEMENT, QML_NAMED_ELEMENT(), QML_ANONYMOUS, QML_INTERFACE, QML_UNCREATABLE(), QML_SINGLETON, QML_ADDED_IN_MINOR_VERSION() или QML_REMOVED_IN_MINOR_VERSION() в окружающем C++ пространстве имён не применяются к окружающему типу, а вместо этого к FOREIGN_NAMESPACE. Окружающему пространству имён всё ещё необходимо зарегистрироваться в системе мета-объектов с помощью макроса Q_NAMESPACE.

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

См. также QML_ELEMENT, QML_NAMED_ELEMENT() и QML_FOREIGN().

QML_IMPLEMENTS_INTERFACES(interfaces)

Этот макрос сообщает Qt, какие QML-интерфейсы реализует класс. Этот макрос следует использовать только для взаимодействия с классами, использующими QML_INTERFACE, в противном случае используйте Q_INTERFACES. Он необходим для корректной работы декларативной регистрации через QML_ELEMENT.

См. также QML_INTERFACE и Q_INTERFACES.

QML_INTERFACE

Этот макрос регистрирует окружающий C++ тип в системе QML как интерфейс.

Типы, зарегистрированные как интерфейсы в QML, также должны объявлять себя как интерфейсы с системой мета-объектов. Например:

struct FooInterface
{
    QML_INTERFACE
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.

ПРИМЕЧАНИЕ: При наследовании от типов, использующих QML_INTERFACE, используйте QML_IMPLEMENTS_INTERFACES вместо Q_INTERFACES.

См. также QML_IMPLEMENTS_INTERFACES(), QML_ELEMENT, QML_NAMED_ELEMENT(), QML_UNCREATABLE() и QML_ANONYMOUS.

QML_NAMED_ELEMENT(name)

Объявляет окружающий тип или пространство имён как доступный в QML, используя name в качестве имени элемента. В остальном ведёт себя так же, как QML_ELEMENT.

class SqlEventDatabase : public QObject
{
    Q_OBJECT
    QML_NAMED_ELEMENT(EventDatabase)

    // ...
};

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

QML_REMOVED_IN_MINOR_VERSION(VERSION)

Объявляет, что окружающий тип или пространство имён было удалено в указанной мажорной версии VERSION, относительно мажорной версии модуля. Это в основном полезно при замене реализации QML-типа. Если соответствующий QML_ADDED_IN_MINOR_VERSION() присутствует в другом типе или пространстве имён с тем же именем QML, то удалённый тип используется при импорте версий модуля ниже VERSION, а добавленный тип используется при импорте версий модуля больше или равно VERSION.

QML_REMOVED_IN_MINOR_VERSION() действует только в том случае, если тип или пространство имён доступны в QML, имея макрос QML_ELEMENT, QML_NAMED_ELEMENT(), QML_ANONYMOUS или QML_INTERFACE.

См. также QML_ELEMENT и QML_NAMED_ELEMENT().

QML_SINGLETON

Объявляет окружающий тип как синглтон в QML. Это действует только в том случае, если тип доступен в QML, имея макрос QML_ELEMENT или QML_NAMED_ELEMENT(). По умолчанию каждый QQmlEngine будет пытаться создать экземпляр синглтона, используя либо конструктор по умолчанию типа, либо статическую функцию-фабрику с сигнатурой T *create(QQmlEngine *, QJSEngine *), когда тип впервые используется. Если оба существуют и доступны, конструктор по умолчанию предпочтительнее. Если нет конструктора по умолчанию и нет функции-фабрики, синглтон изначально недоступен. Это поведение можно переопределить, вызвав qmlRegisterSingletonType() со специфической (внешней) функцией-фабрикой или qmlRegisterSingletonInstance() со специфическим экземпляром для того же класса и того же пространства имён типа и версии.

См. также QML_ELEMENT, QML_NAMED_ELEMENT() и qmlRegisterSingletonInstance().

QML_UNAVAILABLE

Этот макрос объявляет, что окружающий тип недоступен в QML. Он регистрирует внутренний тип-заглушку с именем QQmlTypeNotAvailable как тип QML_FOREIGN(), используя любые дополнительные QML-макросы, которые вы указываете.

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

Пример:

#ifdef NO_GAMES_ALLOWED
struct MinehuntGame
{
    Q_GADGET
    QML_NAMED_ELEMENT(Game)
    QML_UNAVAILABLE
    QML_UNCREATABLE("Get back to work, slacker!");
};
#else
class MinehuntGame : public QObject
{
    Q_OBJECT
    QML_NAMED_ELEMENT(Game)
    // ...
};
#endif

Это вызовет сообщение об ошибке в любом QML, который пытается использовать тип «Game»:

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

Используя эту технику, вам нужен только Q_GADGET-структура для настройки сообщения об ошибке, а не полный QObject. Без QML_UNCREATABLE(), QML_UNAVAILABLE по-прежнему приводит к более специфичному сообщению об ошибке, чем обычное «не является типом» для совершенно неизвестных типов.

См. также QML_ELEMENT, QML_NAMED_ELEMENT(), QML_UNCREATABLE() и QML_FOREIGN().

QML_UNCREATABLE(reason)

Объявляет, что окружающий тип не должен создаваться из QML. Это вступает в силу, если тип доступен в QML, имея макрос QML_ELEMENT или QML_NAMED_ELEMENT(). Значение reason будет выведено как сообщение об ошибке, если попытка создать тип из QML будет обнаружена.

Некоторые QML-типы неявным образом не создаваемы, в частности, типы, экспортируемые с помощью QML_ANONYMOUS, или пространства имён, экспортируемые с помощью QML_ELEMENT или QML_NAMED_ELEMENT(). Для таких типов QML_UNCREATABLE() можно использовать для предоставления пользовательского сообщения об ошибке.

С Qt 6.0 вы можете использовать "" вместо причины, чтобы использовать стандартное сообщение вместо этого.

См. также QML_ELEMENT, QML_NAMED_ELEMENT() и QML_ANONYMOUS.

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

Spec-Zone.ru

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