Типы QML-объектов
Тип QML-объекта — это тип, из которого можно создать экземпляр QML-объекта.
В синтаксическом смысле тип QML-объекта — это тот, который можно использовать для объявления объекта, указав имя типа, за которым следует набор фигурных скобок, охватывающих атрибуты этого объекта. Это отличается от базовых типов, которые нельзя использовать таким же образом. Например, Прямоугольник — это тип QML-объекта: его можно использовать для создания Rectangle объектов. Этого нельзя сделать с примитивными типами, такими как int и bool, которые используются для хранения простых типов данных, а не объектов.
Пользовательские типы QML-объектов можно определять, создавая файл .qml, который определяет тип, как описано в Документы в качестве определений типов QML-объектов, или определяя тип QML из C++ и регистрируя тип в движке QML, как описано в Определение типов QML из C++.
Определение типов объектов из QML
Определение типов объектов через QML-документы
Разработчики плагинов и приложений могут предоставлять типы, определённые как QML-документы. QML-документ, видимый для системы импорта QML, определяет тип, идентифицируемый по имени файла без расширения.
Таким образом, если существует QML-документ с именем "MyButton.qml", он предоставляет определение типа "MyButton", которое может быть использовано в приложении QML.
См. документацию о QML-документах для получения информации о том, как определить QML-документ, и синтаксисе языка QML. После того, как вы знакомы с языком QML и тем, как определять QML-документы, см. документацию, объясняющую, как определять и использовать свои собственные многократно используемые типы QML в QML-документах.
См. Определение типов объектов через QML-документы для получения дополнительной информации.
Определение анонимных типов с помощью компонента
Другой метод создания типов объектов из QML — использование типа Component. Это позволяет определить тип в строке 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-документ.
Обратите внимание, что каждое объявление объекта Component создаёт свой собственный объем компонента. Любые значения id, используемые и ссылающиеся на них внутри объявления объекта Component, должны быть уникальными в пределах этого объёма, но не обязательно уникальными в пределах документа, в котором объявлен встроенный компонент. Таким образом, объявленный Прямоугольник в объявлении объекта 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.6/qtqml-typesystem-objecttypes.html