Типы 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, используемые и ссылающиеся изнутри объявления объекта Компонент, должны быть уникальными в этой области, но не обязательно уникальными в документе, в котором объявлен встроенный компонент. Таким образом, Прямоугольник, объявленный в объявление объекта myComponent, может иметь id root без конфликта с root, объявленным для объекта Элемент в том же документе, так как эти два значения 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/archives/qt-5.11/qtqml-typesystem-objecttypes.html