Типы QML-объектов
Тип QML-объекта — это тип, из которого можно создать QML-объект.
Синтаксически, QML-тип объекта — это тип, который можно использовать для объявления объекта, указав имя типа, за которым следует набор фигурных скобок, содержащих атрибуты этого объекта. Это отличается от базовых типов, которые нельзя использовать таким же образом. Например, Rectangle — это тип 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 без конфликта с 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.2/qtqml-typesystem-objecttypes.html