Spec-Zone.ru › Qt 5.11

Тип QML Shape

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

Заявление импорта: import QtQuick.Shapes 1.11
С тех пор: 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 в 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

Spec-Zone.ru

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