Типы 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/qt-5.13/qtqml-typesystem-objecttypes.html