Тип QML Shape
Отображает путь. Подробнее...
| Заявление об импорте: | import QtQuick.Shapes 1.14 |
| С тех пор: | 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), доступен только универсальный рендерер фигур. - Поддерживается backend
software. В этом случае путь отображается с помощью QPainter::strokePath() и QPainter::fillPath(). - DirectX 12 backend в настоящее время не поддерживается.
- Backend 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, когда используется стандартный графический бэкенд 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.14/qml-qtquick-shapes-shape.html