Тип QML Shape
Отображает путь. Подробнее...
| Заявление об импорте: | import QtQuick.Shapes 1.13 |
| С момента: | Qt 5.10 |
| Наследует: | |
| Наследуется от: |
Свойства
- asynchronous : bool
- containsMode : перечисление
- data : список<Объект>
- rendererType : перечисление
- status : перечисление
- vendorExtensionsEnabled : bool
Подробное описание
Отображает путь, либо генерируя геометрию с помощью QPainterPath и ручного триангуляции, либо используя расширение поставщика GPU, например 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 и универсального метода на других. - Бекенд
softwareполностью поддерживается. В этом случае путь рендерится с помощью QPainter::strokePath() и QPainter::fillPath(). - Бекенд Direct 3D 12 в настоящее время не поддерживается.
- Бекенд 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.
containsMode : перечисление
Это свойство определяет определение contains() для Shape. Это полезно в случае добавления обработчиков ввода Qt Quick, и вы хотите реагировать только тогда, когда указатель мыши или точка касания полностью находятся внутри Shape.
| Постоянная | Описание |
|---|---|
Shape.BoundingRectContains |
Базовая реализация QQuickItem::contains() проверяет только, находится ли заданная точка внутри прямоугольной ограничивающей рамки. Это самая эффективная реализация, поэтому она используется по умолчанию. |
Shape.FillContains |
Проверяет, содержит ли внутренняя часть (часть, которая была бы закрашена при отрисовке с заливкой) любого ShapePath, составляющего этот Shape, заданную точку. Чем сложнее и больше ShapePath вы добавляете, тем менее эффективным становится это проверка, что потенциально может замедлить обработку событий в вашем приложении. Поэтому его следует использовать с осторожностью. |
Один из способов ускорить проверку FillContains — это создать приблизительный контур с минимальным количеством точек, поместить его в прозрачный Shape поверх и добавить ваши обработчики указателей к нему, чтобы проверка включения была дешевле во время доставки событий.
Это свойство было добавлено в QtQuick.Shapes 1.11.
[default] data : список<Объект>
Это свойство содержит объекты ShapePath, которые определяют содержимое Shape. Оно также может содержать любые другие типы объектов, так как Shape, как и Item, позволяет добавлять любые визуальные или невизуальные объекты в качестве дочерних элементов.
rendererType : перечисление
Это свойство определяет, какой бекенд рендеринга пути активен.
| Постоянная | Описание |
|---|---|
Shape.UnknownRenderer |
Рендерер неизвестен. |
Shape.GeometryRenderer |
Универсальное, независимое от драйвера решение для OpenGL. Использует тот же подход к триангуляции на ЦП, что и OpenGL 2 paint engine QPainter. Это значение по умолчанию на оборудовании, не являющемся NVIDIA, при использовании базового OpenGL Qt Quick бэкенда сцены. |
Shape.NvprRenderer |
Элементы пути рендерятся с помощью вызовов OpenGL, использующих расширение GL_NV_path_rendering . Это значение по умолчанию на оборудовании NVIDIA при использовании базового OpenGL Qt Quick бэкенда сцены. |
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, независимо от графической карты и драйверов. Для включения использования специфичных для поставщика подходов к рендерингу пути установите значение в true. В зависимости от платформы и содержимого это может привести к улучшению производительности. Установка значения в true в любом случае безопасна, так как рендеринг возвращается к стандартному методу, когда специфический для поставщика подход, например GL_NV_path_rendering, не поддерживается во время выполнения.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qml-qtquick-shapes-shape.html