Spec-Zone.ru › Qt 5.13

Тип QML Shape

Отображает путь. Подробнее...

Заявление об импорте: import QtQuick.Shapes 1.13
С момента: Qt 5.10
Наследует:

Item

Наследуется от:

EllipseShape, LineShape и MaskShape

  • Список всех членов, включая наследуемые члены

Свойства

  • 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API