Spec-Zone.ru › Qt 5.15

Типы 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-документы для получения дополнительной информации.

Определение анонимных типов с помощью Component

Другой метод создания типов объектов внутри 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, не конфликтуя с 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.15/qtqml-typesystem-objecttypes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API