Spec-Zone.ru › Qt 5.12

Тип QML Shape

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

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

Item

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

Свойства

  • 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, а общего метода — на других.
  • 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-движок рисования 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 завершена.
Shape.Processing Путь обрабатывается.

vendorExtensionsEnabled : bool

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

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

Начиная с Qt 5.12, Shape.NvprRenderer по умолчанию отключен, и используется единообразное поведение, основанное на триангуляции пути и генерации узлов QSGGeometryNode, независимо от графической карты и драйверов. Чтобы включить использование vendor-специфичных подходов к рендерингу путей, установите значение в true. В зависимости от платформы и содержимого это может привести к улучшению производительности. Установка значения в true в любом случае безопасна, так как рендеринг возвращается к стандартному методу, когда vendor-специфичный подход, такой как GL_NV_path_rendering, не поддерживается во время выполнения.

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

Spec-Zone.ru

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