Тип QML Shape
Отображает путь. Подробнее...
| Оператор импорта: | import QtQuick.Shapes |
| С момента: | 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 Examples - Shapes, 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 Input Handlers и хотите реагировать только тогда, когда указатель мыши или касания полностью находится внутри 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. Это значение по умолчанию, когда используется бекенд 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, не реализовано никаких vendor-специфических путей отрисовки.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qml-qtquick-shapes-shape.html