Тип QML Shape
Отображает путь. Подробнее...
| Оператор импорта: | import QtQuick.Shapes 1.1 |
| С тех пор: | Qt 5.10 |
| Наследует: | |
| Наследуется от: |
Свойства
- asynchronous : bool
- containsMode : перечисление
- data : список<Объект>
- rendererType : перечисление
- status : перечисление
- vendorExtensionsEnabled : bool
Подробное описание
Отображает путь, либо сгенерировав геометрию через QPainterPath и ручную триангуляцию, либо с помощью расширения графического процессора производителя.
Этот подход отличается от отображения фигур через 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 доступен только общий подход на основе триангуляции. Когда OpenGL не используется непосредственно графическим процессором, например, потому что используется абстракция графики (QRhi), доступен только общий рендерер фигур.
- Бекенд
softwareполностью поддерживается. В этом случае путь отрисовывается с помощью QPainter::strokePath() и QPainter::fillPath(). - Бекенд OpenVG в настоящее время не поддерживается.
При использовании Shape важно учитывать возможные последствия для производительности:
- При работе приложения с общей реализацией Shape на основе триангуляции, генерация геометрии происходит полностью на процессоре. Это потенциально дорогостоящее действие. Изменение набора элементов пути, изменение свойств этих элементов или изменение определенных свойств самого Shape приводят к повторной триангуляции затронутых путей при каждом изменении. Следовательно, применение анимации к таким свойствам может повлиять на производительность на менее мощных системах.
- Однако, основанная на данных и декларативная природа API Shape часто означает лучшую кэшируемость для базовых ресурсов процессора и графического процессора. Изменение свойства в одном ShapePath приведет только к повторной обработке затронутого ShapePath, оставив другие части Shape неизменными. Следовательно, часто изменяемое свойство может привести к более низкой общей нагрузке на систему по сравнению с императивными подходами к отрисовке (например, QPainter).
- В то же время необходимо уделять внимание количеству элементов Shape в сцене. Способ представления такого элемента 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, заданную точку. Чем сложнее и больше ShapePath вы добавляете, тем менее эффективной является проверка, что может потенциально замедлить доставку событий в вашем приложении. Поэтому его следует использовать с осторожностью. |
Один из способов ускорения проверки FillContains состоит в том, чтобы сгенерировать приблизительный контур с минимальным количеством точек, поместить его в прозрачный Shape поверх и добавить ваши обработчики указателя в него, так что проверка содержательности будет менее ресурсоёмкой во время доставки событий.
Это свойство было введено в QtQuick.Shapes 1.11.
[по умолчанию] data : список<Объект>
Это свойство содержит объекты ShapePath, которые определяют содержимое Shape. Оно также может содержать любые другие типы объектов, так как Shape, как и Item, позволяет добавлять любые визуальные или невизуальные объекты в качестве дочерних элементов.
rendererType : перечисление
Это свойство определяет, какой бэкенд отрисовки путей активен.
| Постоянная | Описание |
|---|---|
Shape.UnknownRenderer |
Рендерер неизвестен. |
Shape.GeometryRenderer |
Общая, независимая от драйвера реализация для OpenGL. Использует тот же подход триангуляции на основе процессора, что и 2D-движок отрисовки OpenGL в QPainter. Это значение по умолчанию, когда используется OpenGL Qt Quick бэкенд. |
Shape.SoftwareRenderer |
Чистая отрисовка QPainter с использованием растрового движка отрисовки. Это значение по умолчанию, и единственный вариант, когда Qt Quick движок сцены работает с бэкендом software. |
status : перечисление
Это свойство определяет состояние Shape и актуально, когда Shape.asynchronous установлено в значение true.
| Постоянная | Описание |
|---|---|
Shape.Null |
Еще не инициализировано. |
Shape.Ready |
Обработка Shape завершена. |
Shape.Processing |
Путь обрабатывается. |
vendorExtensionsEnabled : bool
Это свойство управляет использованием нестандартных расширений OpenGL.
Значение по умолчанию — false.
Начиная с Qt 6.0, не реализованы пути рендеринга, специфичные для производителя.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qml-qtquick-shapes-shape.html