Тип QML Shape
Отображает путь. Подробнее...
| Заявление импорта: | import QtQuick.Shapes 1.11 |
| С тех пор: | 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 вfalse. 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. Сцены, которые не могут избежать использования большого количества отдельных элементов Shape, должны рассмотреть возможность установки Shape.vendorExtensionsEnabled в значение
false.
См. также Примеры Qt Quick - Фигуры, Path, PathMove, PathLine, PathQuad, PathCubic, PathArc и PathSvg.
Документация по свойствам
asynchronous : bool
Когда rendererType равен Shape.GeometryRenderer, входной путь триангулируется на ЦП во время фазы полировки Shape. Это потенциально дорого. Чтобы перенести эту работу в отдельные рабочие потоки, установите это свойство в true.
При включении отображения Shape не будет ожидать, пока содержимое станет доступным. Вместо этого поток gui/главный поток не блокируется, и результаты рендеринга пути отображаются только после завершения всей асинхронной работы.
Значение по умолчанию false.
containsMode : перечисление
Это свойство определяет определение contains() для Shape. Это полезно в случае добавления Обработчиков указателя, и вы хотите реагировать только тогда, когда указатель или точка касания полностью находятся внутри 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 scenegraph. |
Shape.NvprRenderer |
Элементы пути рендерятся путем выполнения вызовов OpenGL с использованием расширения GL_NV_path_rendering. Это значение по умолчанию на оборудовании NVIDIA, когда используется стандартный бекенд OpenGL Qt Quick scenegraph. |
Shape.SoftwareRenderer |
Чистое рисование QPainter с помощью растрового движка рисования. Это значение по умолчанию и единственный вариант, когда Qt Quick scenegraph работает с software бекендом. |
status : перечисление
Это свойство определяет состояние фигуры и актуально, когда Shape.asynchronous задано в значение true.
| Константа | Описание |
|---|---|
Shape.Null |
Еще не инициализировано. |
Shape.Ready |
Обработка фигуры завершена. |
Shape.Processing |
Путь обрабатывается. |
vendorExtensionsEnabled : bool
Это свойство управляет использованием нестандартных расширений OpenGL, таких как GL_NV_path_rendering. Чтобы отключить Shape.NvprRenderer и обеспечить единообразное поведение независимо от графической карты и драйверов, установите это свойство в значение false.
Значение по умолчанию — true.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qml-qtquick-shapes-shape.html