Типы 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 — использование типа 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, должны быть уникальными в этой области видимости, но не обязательно уникальными в документе, в котором объявлен встроенный компонент. Таким образом, объявленный Rectangle в объявлении объекта myComponent мог иметь id 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-5.14/qtqml-typesystem-objecttypes.html