Класс 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