Типы QML-объектов
Тип QML-объекта — это тип, из которого можно создать QML-объект.
Синтаксически QML-тип объекта — это тип, который можно использовать для объявления объекта, указав имя типа, за которым следует набор фигурных скобок, содержащих атрибуты этого объекта. Это отличается от базовых типов, которые нельзя использовать таким же образом. Например, Прямоугольник — это тип QML-объекта: с его помощью можно создавать объекты типа Rectangle. Это невозможно сделать с примитивными типами, такими как int и bool, которые используются для хранения простых типов данных, а не объектов.
Пользовательские QML-типы объектов можно определить, создав файл .qml, который определяет тип, как описано в Документах в качестве определений типов QML-объектов, или определив QML-тип на C++ и зарегистрировав тип в QML-движке, как описано в Определении QML-типов на C++. Обратите внимание, что в обоих случаях имя типа должно начинаться с заглавной буквы, чтобы быть объявлено как QML-тип объекта в файле QML.
Определение типов объектов из QML
Определение типов объектов через QML-документы
Создатели плагинов и разработчики приложений могут предоставлять типы, определенные как QML-документы. QML-документ, видимый для QML-системы импорта, определяет тип, идентифицируемый по имени файла минус расширения файла.
Таким образом, если существует QML-документ с именем "MyButton.qml", он предоставляет определение типа "MyButton", которое можно использовать в QML-приложении.
См. документацию по QML-документам для получения информации о том, как определить QML-документ, и о синтаксисе языка QML. После того, как вы ознакомитесь с языком QML и тем, как определять QML-документы, ознакомьтесь с документацией, которая объясняет, как определять и использовать свои собственные повторно используемые QML-типы в QML-документах.
См. Определение типов объектов через QML-документы для получения дополнительной информации.
Определение анонимных типов с помощью компонента
Другой способ создания типов объектов из QML — использование типа Компонент. Это позволяет определять тип непосредственно в QML-документе вместо использования отдельного документа в файле .qml.
Item {
id: root
width: 500; height: 500
Component {
id: myComponent
Rectangle { width: 100; height: 100; color: "red" }
}
Component.onCompleted: {
myComponent.createObject(root)
myComponent.createObject(root, {"x": 200})
}
} Здесь объект myComponent фактически определяет анонимный тип, который можно создать с помощью Component::createObject для создания объектов этого анонимного типа.
Встраиваемые компоненты обладают всеми характеристиками обычных компонентов верхнего уровня и используют тот же список import , что и содержащий их QML-документ.
Обратите внимание, что каждый объявление объекта Компонент создает свою собственную область видимости компонента. Любые значения id, используемые и упоминаемые в объявлении объекта Компонент, должны быть уникальными в этой области видимости, но не обязательно уникальными в документе, в котором объявлен встраиваемый компонент. Поэтому прямоугольник Rectangle, объявленный в объявлении объекта myComponent, может иметь id root, не конфликтуя с root, объявленным для объекта Item в том же документе, так как эти два значения id объявлены в разных областях видимости компонента.
Для получения дополнительной информации см. Область видимости и разрешение имен.
Определение типов объектов из C++
Создатели плагинов на C++ и разработчики приложений могут регистрировать типы, определенные на C++, с помощью API, предоставляемого модулем Qt QML. Существуют различные функции регистрации, каждая из которых позволяет выполнить разные задачи. Для получения дополнительной информации об этих функциях регистрации и о специфике экспорта пользовательских C++-типов в QML, см. документацию по Определению QML-типов из C++.
QML-система типов опирается на импорты, плагины и расширения, которые устанавливаются в известный путь импорта. Плагины могут предоставляться сторонними разработчиками и повторно использоваться разработчиками приложений-клиентов. Для получения дополнительной информации о том, как создать и развернуть QML-модуль расширения, см. документацию по QML-модулям.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qtqml-typesystem-objecttypes.html