Spec-Zone.ru › Qt 5.14

Тип QML Shape

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

Заявление об импорте: import QtQuick.Shapes 1.14
С тех пор: 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), доступен только универсальный рендерер фигур.
  • Поддерживается backend software. В этом случае путь отображается с помощью QPainter::strokePath() и QPainter::fillPath().
  • DirectX 12 backend в настоящее время не поддерживается.
  • Backend 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, когда используется стандартный графический бэкенд 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.14/qml-qtquick-shapes-shape.html

Spec-Zone.ru

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