Spec-Zone.ru › Qt 6.0

Тип QML Shape

Отображает путь. Подробнее...

Заявление об импорте: import QtQuick.Shapes 1.0
С тех пор: Qt 5.10
Наследует:

Item

Наследуется от:

EllipseShape, LineShape и MaskShape

  • Список всех членов, включая унаследованные

Свойства

  • asynchronous : bool
  • containsMode : перечисление
  • data : список<Объект>
  • rendererType : перечисление
  • status : перечисление
  • vendorExtensionsEnabled : bool

Подробное описание

Отображает путь, либо генерируя геометрию через QPainterPath и ручную триангуляцию, либо используя расширение поставщика графического процессора, например GL_NV_path_rendering.

Этот подход отличается от отображения фигур с помощью QQuickPaintedItem или 2D-холста, поскольку путь никогда не растрируется в программном обеспечении. Таким образом, Shape подходит для создания фигур, охватывающих большие области экрана, избегая штрафа за производительность при загрузке текстур или блицах буфера кадра. Кроме того, декларативный API позволяет манипулировать, привязывать и даже анимировать свойства элементов пути, такие как начальная и конечная точки, точки управления и т.д.

Типы для указания элементов пути совместно используются между PathView и Shape. Однако не все реализации Shape поддерживают все типы элементов пути, а некоторые могут не иметь смысла для PathView. Текущий поддерживаемый Shape подмножество включает: PathMove, PathLine, PathQuad, PathCubic, PathArc и PathSvg.

См. Path для подробного обзора поддерживаемых элементов пути.

Shape {
    width: 200
    height: 150
    anchors.centerIn: parent
    ShapePath {
        strokeWidth: 4
        strokeColor: "red"
        fillGradient: LinearGradient {
            x1: 20; y1: 20
            x2: 180; y2: 130
            GradientStop { position: 0; color: "blue" }
            GradientStop { position: 0.2; color: "green" }
            GradientStop { position: 0.4; color: "red" }
            GradientStop { position: 0.6; color: "yellow" }
            GradientStop { position: 1; color: "cyan" }
        }
        strokeStyle: ShapePath.DashLine
        dashPattern: [ 1, 4 ]
        startX: 20; startY: 20
        PathLine { x: 180; y: 130 }
        PathLine { x: 20; y: 130 }
        PathLine { x: 20; y: 20 }
    }
}

Как и Item, Shape также позволяет объявлять любые визуальные или невизуальные объекты как дочерние. Объекты ShapePath обрабатываются специально. Это полезно, так как позволяет добавлять визуальные элементы, такие как Rectangle или Image, и невизуальные объекты, такие как Timer, непосредственно в качестве дочерних элементов Shape.

Следующий список обобщает доступные подходы к визуализации Shape:

  • При работе с OpenGL-бэкендом Qt Quick доступны как универсальные, основанные на триангуляции, так и специфичные для NVIDIA методы GL_NV_path_rendering. По умолчанию используется только универсальный подход. Установка свойства Shape.vendorExtensionsEnabled в true приводит к использованию NV_path_rendering на системах NVIDIA при непосредственной работе с OpenGL, и универсального метода на других системах. Когда OpenGL не используется напрямую графическим деревом сцены, например, из-за использования абстракции графики (QRhi), доступен только универсальный рендерер фигур.
  • Бэкенд software полностью поддерживается. Путь визуализируется с помощью QPainter::strokePath() и QPainter::fillPath() в этом случае.
  • Бэкенд OpenVG в настоящее время не поддерживается.

При использовании Shape важно учитывать потенциальные последствия для производительности:

  • Когда приложение работает с универсальной, основанной на триангуляции реализацией Shape, генерация геометрии происходит полностью на процессоре. Это потенциально дорогостоящее действие. Изменение набора элементов пути, изменение свойств этих элементов или изменение определенных свойств самого Shape приводят к повторной триангуляции затронутых путей при каждом изменении. Таким образом, применение анимации к таким свойствам может повлиять на производительность на менее мощных системах.
  • Однако, данные ориентированный, декларативный характер API Shape часто означает лучшую кэшируемость для базовых ресурсов процессора и графического процессора. Изменение свойства в одном элементе ShapePath приведет только к повторной обработке затронутого элемента ShapePath, оставляя неизменными другие части Shape. Поэтому часто меняющееся свойство может привести к более низкой общей нагрузке системы, чем при императивных методах рисования (например, QPainter).
  • Если требуется анимировать свойства, отличные от цветов обводки и заливки, рекомендуется использовать системы, обеспечивающие GL_NV_path_rendering , где стоимость изменений свойств меньше.
  • В то же время необходимо обращать внимание на количество элементов Shape в сцене, особенно при использовании этого специального ускоренного подхода для GL_NV_path_rendering. Способ представления такого элемента Shape в графическом дереве сцены отличается от обычного элемента на основе геометрии и влечет за собой определенную стоимость при изменении состояний OpenGL.
  • В качестве общего правила, сцены должны избегать использования отдельных элементов Shape, если это не абсолютно необходимо. Предпочтите использование одного элемента Shape с несколькими элементами ShapePath вместо нескольких элементов Shape.

См. также Примеры Qt Quick - Фигуры, Path, PathMove, PathLine, PathQuad, PathCubic, PathArc и PathSvg.

Документация по свойствам

asynchronous : bool

Когда rendererType равен Shape.GeometryRenderer, входной путь триангулируется на процессоре во время фазы полирования Shape. Это потенциально дорогостоящее действие. Чтобы перенести эту работу на отдельные потоки обработки, установите это свойство в значение true.

При включении, отображение Shape не будет ожидать готовности содержимого. Вместо этого поток GUI/главный поток не блокируется, и результаты рендеринга пути отображаются только после завершения всей асинхронной работы.

Значение по умолчанию false.

[с QtQuick.Shapes 1.11] containsMode : перечисление

Это свойство определяет определение contains() для Shape. Оно полезно в случае добавления обработчиков событий Qt Quick и необходимости реагировать только тогда, когда указатель мыши или сенсорная точка полностью находится внутри Shape.

Постоянная Описание
Shape.BoundingRectContains Стандартная реализация QQuickItem::contains() проверяет только, находится ли заданная точка внутри прямоугольной области. Это наиболее эффективная реализация, поэтому она используется по умолчанию.
Shape.FillContains Проверяет, содержится ли заданная точка внутри внутренности (части, которая заполнилась бы, если бы вы визуализировали ее с заливкой) любого элемента ShapePath, составляющего данное Shape. Чем больше и сложнее ShapePaths вы добавляете, тем менее эффективной становится эта проверка, что может потенциально замедлить доставку событий в вашем приложении. Поэтому следует использовать с осторожностью.

Один из способов ускорить проверку FillContains заключается в генерации приблизительного контура с минимальным количеством точек, размещении его на прозрачном Shape сверху и добавлении ваших обработчиков указателей к нему, так что проверка включения является более дешёвой во время доставки событий.

Это свойство было добавлено в QtQuick.Shapes 1.11.

[по умолчанию] data : список<Объект>

Это свойство содержит объекты ShapePath, которые определяют содержимое Shape. Оно также может содержать любые другие типы объектов, так как Shape, как и Item, позволяет добавлять любые визуальные или невизуальные объекты в качестве дочерних.

rendererType : перечисление

Это свойство определяет, какой бэкенд визуализации пути активен.

Постоянная Описание
Shape.UnknownRenderer Рендерер неизвестен.
Shape.GeometryRenderer Универсальное, независимое от драйвера решение для OpenGL. Использует тот же подход к триангуляции на основе процессора, что и OpenGL 2-движок рисования QPainter. Это значение по умолчанию на оборудовании, не являющемся NVIDIA, когда используется стандартный бэкенд графического дерева сцены Qt Quick OpenGL.
Shape.SoftwareRenderer Чистое рисование QPainter с использованием растрового движка рисования. Это значение по умолчанию и единственный вариант при работе графического дерева сцены Qt Quick с бэкендом software.

status : перечисление

Это свойство определяет состояние Shape и актуально, когда Shape.asynchronous установлено в значение true.

Константа Описание
Shape.Null Ещё не инициализировано.
Shape.Ready Обработка фигуры завершена.
Shape.Processing Путь обрабатывается.

vendorExtensionsEnabled : bool

Это свойство управляет использованием нестандартных расширений OpenGL, таких как GL_NV_path_rendering.

Значение по умолчанию — false.

Начиная с Qt 5.12, Shape.NvprRenderer по умолчанию отключен, и используется единообразный метод, основанный на триангуляции пути и генерации экземпляров QSGGeometryNode, независимо от графической карты и драйверов.

Начиная с Qt 6.0, не реализовано никаких vendor-специфичных путей рендеринга.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qml-qtquick-shapes-shape.html

Spec-Zone.ru

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