Тип QML Shape
Отображает путь. Подробнее...
| Оператор импорта: | import QtQuick.Shapes 1.15 |
| С момента: | Qt 5.10 |
| Наследуется от: | |
| Наследуется: |
Свойства
- 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() в этом случае. - Бекенд 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, заданную точку. Чем сложнее и многочисленнее ShapePaths, тем менее эффективна эта проверка, что может потенциально замедлить доставку событий в вашем приложении. Поэтому следует использовать её с осторожностью. |
Один из способов ускорения проверки FillContains — создать приблизительный контур с минимальным количеством точек, поместить его в прозрачный Shape сверху и добавить ваши обработчики указателя к нему, чтобы проверка включения была менее затратной во время доставки событий.
Это свойство было введено в QtQuick.Shapes 1.11.
[default] data : список<Объект>
Это свойство содержит объекты ShapePath, которые определяют содержимое Shape. Оно также может содержать любые другие типы объектов, так как Shape, как и Item, позволяет добавлять любые визуальные или невизуальные объекты в качестве дочерних элементов.
rendererType : перечисление
Это свойство определяет активный бекенд рендеринга пути.
| Постоянная | Описание |
|---|---|
Shape.UnknownRenderer |
Рендерер неизвестен. |
Shape.GeometryRenderer |
Общее, независимое от драйвера решение для OpenGL. Использует тот же подход к триангуляции на основе ЦП, что и OpenGL 2 paint engine QPainter. Это значение по умолчанию на оборудовании без NVIDIA, когда используется стандартный бекенд сцены графики Qt Quick, OpenGL. |
Shape.NvprRenderer |
Элементы пути рендерятся с помощью вызовов OpenGL, использующих расширение GL_NV_path_rendering. Это значение по умолчанию на оборудовании 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, независимо от графической карты и драйверов. Чтобы включить использование методов рендеринга путей, специфичных для производителя, установите значение в 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.15/qml-qtquick-shapes-shape.html