Spec-Zone.ru › Qt 5.15

Тип QML Shape

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

Оператор импорта: import QtQuick.Shapes 1.15
С момента: Qt 5.10
Наследуется от:

Item

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

EllipseShape, LineShape и MaskShape

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

Свойства

  • 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

Spec-Zone.ru

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