Класс 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 выделял один большой буфер кадра и вместо этого рисовал в подрегионе. Это экономит перераспределение памяти за счёт использования большего объёма памяти. Обратите внимание, что это не часто встречающаяся проблема. |
Тип 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, если mip-мапинг включён; в противном случае возвращает false.
По умолчанию mip-мапинг отключён.
См. также 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, mip-мапинг включён для связанной текстуры.
Mip-мапинг увеличивает скорость рендеринга и уменьшает артефакты сглаживания, когда элемент уменьшается в масштабе.
По умолчанию mip-мапинг отключён.
См. также mipmap().
END_OF_DOCUMENT_MARKERvoid 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.15/qquickpainteditem.html