Spec-Zone.ru › Qt

Тип QML Shape

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

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

Item

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

EllipseShape, LineShape и MaskShape

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

Свойства

  • asynchronous : bool
  • containsMode : перечисление
  • data : список<Объект>
  • rendererType : перечисление
  • status : перечисление
  • vendorExtensionsEnabled : bool

Подробное описание

Отображает путь, генерируя геометрию через QPainterPath и ручную триангуляцию или используя расширение поставщика графического процессора.

Этот подход отличается от отображения фигур с помощью 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 доступен только общий, основанный на триангуляции, подход. Если OpenGL не используется напрямую в графе сцены, например, из-за использования графического абстракционного уровня (QRhi), доступен только общий рендерер фигур.
  • Бекенд software полностью поддерживается. В этом случае путь отображается с помощью QPainter::strokePath() и QPainter::fillPath().
  • Бекенд OpenVG в настоящее время не поддерживается.

При использовании Shape важно учитывать потенциальные последствия для производительности:

  • Когда приложение работает с общей, основанной на триангуляции, реализацией Shape, генерация геометрии выполняется полностью на центральном процессоре. Это потенциально дорогостояще. Изменение набора элементов пути, изменение свойств этих элементов или изменение определенных свойств самого Shape приводят к повторной триангуляции затронутых путей при каждом изменении. Поэтому применение анимации к таким свойствам может повлиять на производительность на менее мощных системах.
  • Однако данные, управляемые декларативным характером API Shape, часто означают лучшую кэшируемость для базовых ресурсов ЦП и графического процессора. Изменение свойства в одном ShapePath приведет только к повторной обработке затронутого ShapePath, оставив другие части Shape неизменными. Следовательно, часто изменяемое свойство всё ещё может привести к более низкой общей нагрузке системы, чем при императивных подходах к отрисовке (например, QPainter).
  • В то же время необходимо обратить внимание на количество элементов Shape в сцене. Способ представления такого элемента Shape в графе сцены отличается от обычного геометрического элемента и влечёт за собой определённые затраты при изменении состояния OpenGL.
  • Как общее правило, сцены должны избегать использования отдельных элементов Shape, если это не абсолютно необходимо. Предпочитайте использование одного элемента Shape с несколькими элементами ShapePath вместо нескольких элементов Shape.

См. такжеQt Quick Examples - Shapes, Path, PathMove, PathLine, PathQuad, PathCubic, PathArc и PathSvg.

Документация по свойствам

asynchronous : bool

Когда rendererType равен Shape.GeometryRenderer, входной путь триангулируется на ЦП во время фазы полировки Shape. Это потенциально дорогостояще. Чтобы переложить эту работу на отдельные потоки-рабочие, установите это свойство в true.

При включении отображения Shape не будет ждать, пока содержимое станет доступным. Вместо этого поток GUI/главный поток не блокируется, и результаты отрисовки пути показываются только после завершения всей асинхронной работы.

Значение по умолчанию - false.

[с QtQuick.Shapes 1.11] containsMode : перечисление

Это свойство определяет определение contains() для Shape. Это полезно, если вы добавили Qt Quick Input Handlers и хотите реагировать только тогда, когда указатель мыши или касания полностью находится внутри Shape.

Постоянная Описание
Shape.BoundingRectContains Стандартная реализация QQuickItem::contains() проверяет только, находится ли заданная точка внутри прямоугольной области ограничивающего прямоугольника. Это наиболее эффективная реализация, поэтому она используется по умолчанию.
Shape.FillContains Проверка, содержит ли внутренняя часть (часть, которая была бы заполнена, если вы отображаете её с заполнением) любого ShapePath, составляющего данный Shape, заданную точку. Чем сложнее и больше ShapePaths вы добавите, тем менее эффективной станет проверка, что потенциально может замедлить доставку событий в ваше приложение. Поэтому следует использовать с осторожностью.

Один из способов ускорить проверку FillContains - это создать приблизительный контур с минимальным количеством точек, поместить его в прозрачный Shape поверх и добавить ваши обработчики указателей в него, чтобы проверка включения была дешевле во время доставки событий.

Это свойство было добавлено в QtQuick.Shapes 1.11.

[по умолчанию] data : список<Объект>

Это свойство содержит объекты ShapePath, определяющие содержимое Shape. Оно также может содержать любые другие типы объектов, поскольку Shape, подобно Item, позволяет добавлять любые визуальные или невизуальные объекты в качестве дочерних элементов.

rendererType : перечисление

Это свойство определяет, какой бекенд отображения пути активен.

Постоянная Описание
Shape.UnknownRenderer Тип рендерера неизвестен.
Shape.GeometryRenderer Общее, независимое от драйвера, решение для OpenGL. Использует тот же подход к триангуляции на основе ЦП, что и OpenGL 2-ый движок отрисовки QPainter. Это значение по умолчанию, когда используется бекенд OpenGL для графа сцены Qt Quick.
Shape.SoftwareRenderer Чистое рисование QPainter с использованием растрового движка отрисовки. Это значение по умолчанию и единственный вариант, когда граф сцены Qt Quick работает с бекендом software.

status : перечисление

Это свойство определяет состояние Shape и актуально, когда Shape.asynchronous установлено в true.

Постоянная Описание
Shape.Null Ещё не инициализирован.
Shape.Ready Shape завершил обработку.
Shape.Processing Путь обрабатывается.

vendorExtensionsEnabled : bool

Это свойство управляет использованием нестандартных расширений OpenGL.

Значение по умолчанию - false.

Начиная с Qt 6.0, не реализовано никаких vendor-специфических путей отрисовки.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qml-qtquick-shapes-shape.html

Spec-Zone.ru

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