Класс QQuickPaintedItem
Класс QQuickPaintedItem предоставляет способ использования API QPainter в графическом дереве QML. Подробнее...
| Заголовок: | #include <QQuickPaintedItem> |
| qmake: | QT += quick |
| Наследует: | QQuickItem |
Типы публичного доступа
| Перечисление | PerformanceHint { FastFBOResizing } |
| Флаги | PerformanceHints |
| Перечисление | RenderTarget { Image, FramebufferObject, InvertedYFramebufferObject } |
Свойства
- fillColor : QColor
- renderTarget : RenderTarget
- textureSize : QSize
- 24 свойства унаследованы от QQuickItem
- 1 свойство унаследовано от QObject
Функции публичного доступа
| 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 |
- 101 функция унаследована от QQuickItem
- 34 функции унаследованы от QObject
- 2 функции унаследованы от QQmlParserStatus
Сигналы
| void | fillColorChanged() |
| void | renderTargetChanged() |
| void | textureSizeChanged() |
- 2 сигнала унаследованы от QQuickItem
- 2 сигнала унаследованы от QObject
Переопределённые защищённые функции
| virtual void | itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value) override |
| virtual void | releaseResources() override |
| virtual QSGNode * | updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data) override |
- 33 защищённые функции унаследованы от QQuickItem
- 9 защищённые функции унаследованы от QObject
Дополнительные унаследованные члены
- 1 слот публичного доступа унаследован от QQuickItem
- 1 слот публичного доступа унаследован от QObject
- 1 переменная публичного доступа унаследована от QObject
- 10 статических членов публичного доступа унаследованы от QObject
- 33 защищённые функции унаследованы от QQuickItem
- 9 защищённых функций унаследованы от QObject
- 2 защищённых переменных унаследованы от QObject
Подробное описание
Класс QQuickPaintedItem предоставляет способ использования API QPainter в графическом дереве QML.
Класс 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 — это typedef для QFlags<PerformanceHint>. Он хранит логическое ИЛИ комбинацию значений PerformanceHint.
enum QQuickPaintedItem::RenderTarget
Это перечисление описывает целевые области отрисовки QQuickPaintedItem. Целевая область отрисовки — это поверхность, на которую QPainter рисует, прежде чем элемент будет отрисован на экране.
| Константа | Значение | Описание |
|---|---|---|
QQuickPaintedItem::Image |
0 |
Значение по умолчанию; QPainter рисует в QImage с использованием растрового движка отрисовки. Содержание изображения необходимо загрузить в графическую память впоследствии, эта операция может быть потенциально медленной, если элемент большой. Эта целевая область отрисовки позволяет высокое качество сглаживания и быструю перемену размера элемента. |
QQuickPaintedItem::FramebufferObject |
1 |
QPainter рисует в QOpenGLFramebufferObject с использованием движка отрисовки OpenGL. Отрисовка может быть быстрее, так как загрузка текстуры не требуется, но качество сглаживания не такое хорошее, как при использовании изображения. Эта целевая область отрисовки позволяет ускорить отрисовку в некоторых случаях, но следует избегать её использования, если элемент часто изменяет свой размер. |
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().
[override virtual protected] void QQuickPaintedItem::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value)
Переопределяет QQuickItem::itemChange().
bool QQuickPaintedItem::mipmap() const
Возвращает true, если mip-маппинг включён; в противном случае возвращает false.
По умолчанию mip-маппинг не включён.
См. также setMipmap().
bool QQuickPaintedItem::opaquePainting() const
Возвращает true, если элемент непрозрачный; в противном случае возвращает false.
По умолчанию элементы, нарисованные вручную, не являются непрозрачными.
См. также setOpaquePainting().
[pure virtual] void QQuickPaintedItem::paint(QPainter *painter)
Эта функция, которая обычно вызывается графическим движком QML, рисует содержимое элемента в локальных координатах.
Базовая текстура будет иметь размер, определённый textureSize при установке или размером элемента, умноженным на коэффициент масштабирования устройства окна.
Функция вызывается после заполнения элемента цветом fillColor.
Переопределите эту функцию в подклассе QQuickPaintedItem, чтобы реализовать отрисовку элемента, используя painter.
Примечание: Графический движок QML использует две отдельные нити: главную нить для обработки событий и обновления анимаций, и вторую нить для фактического рендеринга 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().
void QQuickPaintedItem::setOpaquePainting(bool opaque)
Если opaque имеет значение true, элемент непрозрачный; в противном случае он считается полупрозрачным.
Непрозрачные элементы не смешиваются с остальной частью сцены. Установите это значение в true, если содержимое элемента непрозрачное, чтобы ускорить рендеринг.
По умолчанию элементы, отображаемые с помощью рисования, не являются непрозрачными.
См. также 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().
void QQuickPaintedItem::update(const QRect &rect = QRect())
Планирует перерисовку области, покрываемой rect в этом элементе. Вы можете вызвать эту функцию всякий раз, когда ваш элемент требуется перерисовать, например, если он меняет внешний вид или размер.
Эта функция не вызывает немедленного перерисовки; вместо этого она планирует запрос на перерисовку, который обрабатывается QML Графиком сцены при рендеринге следующего кадра. Элемент будет перерисован только в том случае, если он виден.
См. также paint().
[override virtual protected] QSGNode *QQuickPaintedItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *data)
Переопределено из QQuickItem::updatePaintNode().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qquickpainteditem.html