Тип QML Shape
Отображает путь. Подробнее...
| Заявление об импорте: | import QtQuick.Shapes 1.12 |
| С момента: | 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, а общего метода — на других. 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-движок рисования 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 завершена. |
Shape.Processing |
Путь обрабатывается. |
vendorExtensionsEnabled : bool
Это свойство управляет использованием нестандартных расширений OpenGL, таких как GL_NV_path_rendering.
Значение по умолчанию — false.
Начиная с Qt 5.12, Shape.NvprRenderer по умолчанию отключен, и используется единообразное поведение, основанное на триангуляции пути и генерации узлов QSGGeometryNode, независимо от графической карты и драйверов. Чтобы включить использование vendor-специфичных подходов к рендерингу путей, установите значение в true. В зависимости от платформы и содержимого это может привести к улучшению производительности. Установка значения в true в любом случае безопасна, так как рендеринг возвращается к стандартному методу, когда vendor-специфичный подход, такой как GL_NV_path_rendering, не поддерживается во время выполнения.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qml-qtquick-shapes-shape.html