Объектные типы QML

Добавлено 11 мая 2022 в 16:24

Объектный тип QML – это тип, из которого может быть создан экземпляр объекта QML.

С точки зрения синтаксиса, объектный тип QML – это тип, который можно использовать для объявления объекта путем указания имени типа, за которым следует набор фигурных скобок, охватывающих атрибуты этого объекта. Это отличается от базовых типов, которые нельзя использовать таким же образом. Например, Rectangle – это объектный тип QML: его можно использовать для создания объектов типа Rectangle. Это невозможно сделать с примитивными типами, такими как int и bool, которые используются для хранения простых типов данных, а не объектов.

Пользовательские объектные типы QML можно определить, создав файл .qml, который определяет тип, как описано в разделе «Документы в качестве определений объектных типов QML», или определив тип QML из C++ и зарегистрировав этот тип в движке QML, как описано в разделе «Определение типов QML из С++». Обратите внимание, что в обоих случаях имя типа должно начинаться с заглавной буквы, чтобы в файле 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 для создания объектов этого анонимного типа.

Встроенные компоненты обладают всеми характеристиками обычных компонентов верхнего уровня и используют тот же список импорта, что и содержащий их документ QML.

Обратите внимание, что каждое объявление объекта Component создает свою собственную область видимости компонента. Любые значения id, используемые и на которые ссылаются в объявлении объекта Component, должны быть уникальными в этой области, но не обязательно должны быть уникальными в пределах документа, в котором объявлен встроенный компонент. Таким образом, Rectangle, объявленный в объявлении объекта myComponent, может иметь id root без конфликта с root, объявленным для объекта Item в том же документе, поскольку эти два значения идентификатора объявлены в разных областях видимости компонента.

Дополнительную информацию смотрите в разделе «Область видимости и разрешение именования».

Определение объектных типов из C++

Авторы плагинов C++ и разработчики приложений могут регистрировать типы, определенные в C++, через API, предоставляемый модулем Qt QML. Существуют различные функции регистрации, каждая из которых позволяет выполнять различные варианты использования. Для получения дополнительной информации об этих функциях регистрации и особенностях представления пользовательских типов C++ в QML смотрите раздел, посвященный определению типов QML из C++.

Система типов QML полагается на импорт, плагины и расширения, устанавливаемые в известный путь импорта. Плагины могут предоставляться сторонними разработчиками и повторно использоваться разработчиками клиентских приложений. Дополнительную информацию о том, как создать и развернуть модуль расширения QML, смотрите в разделе по модулям QML.

Теги

GUI / Графический интерфейс пользователяQMLQtQtQuickПрограммированиеТипы данных

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.