Spec-Zone.ru › Qt 5.12

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

Spec-Zone.ru

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