Класс QQuickPaintedItem
Класс QQuickPaintedItem предоставляет способ использования API QPainter в графическом дереве QML. Подробнее...
| Заголовок: | #include <QQuickPaintedItem> |
| qmake: | QT += quick |
| Наследует: | QQuickItem |
Типы public
| перечисление | PerformanceHint { FastFBOResizing } |
| флаги | PerformanceHints |
| перечисление | RenderTarget { Image, FramebufferObject, InvertedYFramebufferObject } |
Свойства
- fillColor : QColor
- renderTarget : RenderTarget
- textureSize : QSize
Функции public
| 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()) |
Переопределенные функции public
| 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 выделил один большой фреймбуфер и вместо этого рисовал в подрегионе. Это экономит ресурсы переизменения размера, но увеличивает использование памяти. Обратите внимание, что эта проблема встречается не так часто. |
Тип PerformanceHints является псевдонимом для QFlags<PerformanceHint>. Он хранит логическое ИЛИ сочетание значений PerformanceHint.
перечисление 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, если mipmap включен; в противном случае возвращается false.
По умолчанию mipmap не включен.
См. также 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 включён для связанной текстуры.
Mipmap увеличивает скорость рендеринга и уменьшает артефакты сглаживания при уменьшении размера элемента.
По умолчанию mipmap не включён.
См. также 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.14/qquickpainteditem.html