Spec-Zone.ru › Qt 5.13

Класс QQuickPaintedItem

Класс QQuickPaintedItem предоставляет способ использования API QPainter в QML графическом дереве сцены. Подробнее...

Заголовок: #include <QQuickPaintedItem>
qmake: QT += quick
Наследует: QQuickItem
  • Список всех членов, включая наследуемые
  • Устаревшие члены

Типы публичного доступа

перечисление PerformanceHint { FastFBOResizing }
флаги PerformanceHints
перечисление RenderTarget { Image, FramebufferObject, InvertedYFramebufferObject }

Свойства

  • fillColor : QColor
  • renderTarget : RenderTarget
  • textureSize : QSize

Функции публичного доступа

QQuickPaintedItem(QQuickItem *parent = nullptr)
virtual ~QQuickPaintedItem() override
bool antialiasing() const
QColor fillColor() const
bool mipmap() const
bool opaquePainting() const
virtual void paint(QPainter *painter) = 0
QQuickPaintedItem::PerformanceHints performanceHints() const
QQuickPaintedItem::RenderTarget renderTarget() const
void setAntialiasing(bool enable)
void setFillColor(const QColor &)
void setMipmap(bool enable)
void setOpaquePainting(bool opaque)
void setPerformanceHint(QQuickPaintedItem::PerformanceHint hint, bool enabled = true)
void setPerformanceHints(QQuickPaintedItem::PerformanceHints hints)
void setRenderTarget(QQuickPaintedItem::RenderTarget target)
void setTextureSize(const QSize &size)
QSize textureSize() const
void update(const QRect &rect = QRect())

Реализованные функции публичного доступа

virtual bool isTextureProvider() const override
virtual QSGTextureProvider * textureProvider() const override

Сигналы

void fillColorChanged()
void renderTargetChanged()
void textureSizeChanged()

Реализованные защищенные функции

virtual void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value) override
virtual void releaseResources() override
virtual QSGNode * updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) override

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

Класс QQuickPaintedItem позволяет использовать API QPainter с QML графическим деревом сцены. Он создает текстурированный прямоугольник в графическом дереве сцены и использует QPainter для рисования на текстуре. Цель отрисовки может быть либо QImage, либо, если используется OpenGL, QOpenGLFramebufferObject. Когда целью отрисовки является QImage, QPainter сначала рисует в изображение, а затем содержимое загружается в текстуру. При использовании QOpenGLFramebufferObject, QPainter рисует непосредственно на текстуру. Вызовите update(), чтобы инициировать перерисовку.

Чтобы включить антиалиасинговое рендеринг QPainter, используйте setAntialiasing().

Для написания собственного элемента отрисовки, сначала создайте подкласс QQuickPaintedItem, а затем начните с реализации его единственной чисто виртуальной функции публичного доступа: paint(), которая реализует фактическое рисование. Рисование будет внутри прямоугольника, охватывающего точки 0,0 и width(),height().

Примечание: Важно понимать последствия производительности, которые могут возникнуть с такими элементами. См. QQuickPaintedItem::RenderTarget и QQuickPaintedItem::renderTarget.

Документация по типам членов

перечисление QQuickPaintedItem::PerformanceHintфлаги QQuickPaintedItem::PerformanceHints

Это перечисление описывает флаги, которые можно включить, чтобы улучшить производительность рендеринга в QQuickPaintedItem. По умолчанию ни один из этих флагов не установлен.

Константа Значение Описание
QQuickPaintedItem::FastFBOResizing 0x1 Изменение размера FBO может быть дорогостоящим процессом на некоторых реализациях драйверов OpenGL. Чтобы обойти эту проблему, можно установить этот флаг, чтобы QQuickPaintedItem выделял один большой объект framebuffer, а вместо этого рисовал в подрегионе. Это экономит ресурсы, затраченные на изменение размера, за счет использования большего объема памяти. Обратите внимание, что это не часто встречающаяся проблема.

Тип PerformanceHints является псевдонимом для QFlags<PerformanceHint>. Он хранит комбинацию значений PerformanceHint, объединенных операцией OR.

перечисление QQuickPaintedItem::RenderTarget

Это перечисление описывает цели отрисовки QQuickPaintedItem. Цель отрисовки — это поверхность, на которую QPainter рисует, прежде чем элемент будет отображен на экране.

Константа Значение Описание
QQuickPaintedItem::Image 0 По умолчанию; QPainter рисует в QImage с использованием растрового движка отрисовки. Содержимое изображения необходимо загрузить в графическую память после этого, что может быть медленным, если элемент большой. Этот целевой объект отрисовки позволяет высокую детализацию сглаживания и быстрое изменение размера элемента.
QQuickPaintedItem::FramebufferObject 1 QPainter рисует в QOpenGLFramebufferObject с использованием движка отрисовки GL. Отрисовка может быть быстрее, так как загрузка текстуры не требуется, но качество сглаживания не такое хорошее, как при использовании изображения. Этот целевой объект отрисовки позволяет более быструю отрисовку в некоторых случаях, но следует избегать его использования, если элемент часто изменяет размер.
QQuickPaintedItem::InvertedYFramebufferObject 2 Точно так же, как для FramebufferObject выше, за исключением того, что после завершения отрисовки, перед рендерингом, нарисованное изображение переворачивается по оси X, так что самые верхние пиксели теперь находятся внизу. Поскольку это делается с координатами текстуры OpenGL, это намного более быстрый способ достижения этого эффекта, чем использование преобразования художника.

См. также setRenderTarget().

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

fillColor : QColor

Это свойство содержит цвет заливки фона элемента.

По умолчанию цвет заливки установлен на Qt::transparent.

Функции доступа:

QColor fillColor() const
void setFillColor(const QColor &)

Сигнал уведомления:

void fillColorChanged()

renderTarget : RenderTarget

Это свойство содержит целевой объект отрисовки элемента.

Это свойство определяет, в какой целевой объект отрисовки QPainter выполняет отрисовку, это может быть QQuickPaintedItem::Image, QQuickPaintedItem::FramebufferObject или QQuickPaintedItem::InvertedYFramebufferObject.

Каждый из них имеет определённые преимущества, обычно производительность против качества. Использование объекта фреймбуфера избегает дорогостоящей загрузки содержимого изображения в текстуру в графической памяти, в то время как использование изображения позволяет высокое качество сглаживания.

Предупреждение: Изменение размера объекта фреймбуфера — дорогостоящая операция, избегайте использования целевого объекта отрисовки QQuickPaintedItem::FramebufferObject, если элемент часто изменяет размер.

По умолчанию целевой объект отрисовки — QQuickPaintedItem::Image.

Примечание: Некоторые бэкэнды Qt Quick могут не поддерживать все варианты целевых объектов отрисовки. Например, бэкэнды, не использующие OpenGL, вероятно, не будут поддерживать QQuickPaintedItem::FramebufferObject и QQuickPaintedItem::InvertedYFramebufferObject. Запросы на эти значения будут проигнорированы.

Функции доступа:

QQuickPaintedItem::RenderTarget renderTarget() const
void setRenderTarget(QQuickPaintedItem::RenderTarget target)

Сигнал уведомления:

void renderTargetChanged()

textureSize : QSize

Определяет размер текстуры.

Изменение размера текстуры не влияет на систему координат, используемую в paint(). Вместо этого применяется коэффициент масштабирования, поэтому отрисовка должна всё ещё происходить в пределах от 0,0 до width(),height().

По умолчанию размер текстуры будет таким же, как и размер этого элемента.

Примечание: Если элемент находится на окне с коэффициентом масштабирования устройства, отличным от 1, этот коэффициент масштабирования будет неявным образом применён к размеру текстуры.

Функции доступа:

QSize textureSize() const
void setTextureSize(const QSize &size)

Сигнал уведомления:

void textureSizeChanged()

Документация по функциям-членам

QQuickPaintedItem::QQuickPaintedItem(QQuickItem *parent = nullptr)

Создаёт QQuickPaintedItem с заданным элементом parent.

[override virtual] QQuickPaintedItem::~QQuickPaintedItem()

Уничтожает QQuickPaintedItem.

bool QQuickPaintedItem::antialiasing() const

Возвращает true, если сглаживание включено, иначе возвращает false.

По умолчанию сглаживание отключено.

См. также setAntialiasing().

[override virtual] bool QQuickPaintedItem::isTextureProvider() const

Переопределяет: QQuickItem::isTextureProvider() const.

[override virtual protected] void QQuickPaintedItem::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value)

Переопределяет: QQuickItem::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value).

bool QQuickPaintedItem::mipmap() const

Возвращает true, если мип-мап включены, иначе возвращает false.

По умолчанию мип-мап отключены.

См. также setMipmap().

bool QQuickPaintedItem::opaquePainting() const

Возвращает true, если элемент непрозрачен; иначе — false.

По умолчанию элементы с отрисовкой не являются непрозрачными.

См. также setOpaquePainting().

[pure virtual] void QQuickPaintedItem::paint(QPainter *painter)

Эта функция, обычно вызываемая QML Scene Graph, отрисовывает содержимое элемента в локальных координатах.

Базовая текстура будет иметь размер, определённый свойством textureSize при установке или размером элемента, умноженным на коэффициент масштабирования пикселей окна.

Функция вызывается после заполнения элемента цветом fillColor.

Переопределите эту функцию в подклассе QQuickPaintedItem, чтобы предоставить реализацию отрисовки элемента, используя painter.

Примечание: QML Scene Graph использует две отдельные нити: главную нить для обработки событий или обновления анимаций и вторую нить для фактической отрисовки OpenGL. Вследствие этого paint() не вызывается из главной нити GUI, а из нити рендера OpenGL. В момент вызова paint() главная нить GUI заблокирована, и поэтому эта функция потокобезопасна.

Предупреждение: Необходимо проявлять особую осторожность при создании QObjects, отправке сигналов, запуске таймеров и других операций внутри этой функции, поскольку они будут иметь сродство к нити рендера.

См. также width(), height() и textureSize.

QQuickPaintedItem::PerformanceHints QQuickPaintedItem::performanceHints() const

Возвращает подсказки производительности.

По умолчанию никакие подсказки производительности не включены.

См. также setPerformanceHint() и setPerformanceHints().

[override virtual protected] void QQuickPaintedItem::releaseResources()

Переопределяет: QQuickItem::releaseResources().

void QQuickPaintedItem::setAntialiasing(bool enable)

Если enable имеет значение true, сглаживание включено.

По умолчанию сглаживание отключено.

См. также antialiasing().

void QQuickPaintedItem::setMipmap(bool enable)

Если enable имеет значение true, мип-мап включены для ассоциированной текстуры.

Мип-мап увеличивают скорость рендеринга и уменьшают артефакты сглаживания при уменьшении размера элемента.

По умолчанию мип-мап отключены.

См. также mipmap().

void QQuickPaintedItem::setOpaquePainting(bool opaque)

Если opaque имеет значение true, элемент является непрозрачным; в противном случае он считается полупрозрачным.

Непрозрачные элементы не смешиваются с остальной частью сцены; следует установить это значение в true, если содержимое элемента непрозрачно для ускорения отрисовки.

По умолчанию элементы, отрисовываемые с помощью paint, не являются непрозрачными.

См. также opaquePainting().

void QQuickPaintedItem::setPerformanceHint(QQuickPaintedItem::PerformanceHint hint, bool enabled = true)

Устанавливает указанный параметр производительности hint для элемента, если enabled имеет значение true; в противном случае параметр производительности очищается.

По умолчанию никакой параметр производительности не включён.

См. также setPerformanceHints() и performanceHints().

void QQuickPaintedItem::setPerformanceHints(QQuickPaintedItem::PerformanceHints hints)

Устанавливает параметры производительности в hints

По умолчанию никакой параметр производительности не включён.

См. также setPerformanceHint() и performanceHints().

[override virtual] QSGTextureProvider *QQuickPaintedItem::textureProvider() const

Реализует: QQuickItem::textureProvider() const.

void QQuickPaintedItem::update(const QRect &rect = QRect())

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

Эта функция не вызывает немедленную отрисовку; вместо этого она планирует запрос на отрисовку, который обрабатывается QML-графическим деревом при отрисовке следующего кадра. Элемент будет перерисован только если он видимый.

См. также paint().

[override virtual protected] QSGNode *QQuickPaintedItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data)

Реализует: QQuickItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *updatePaintNodeData).

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qquickpainteditem.html

Spec-Zone.ru

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