Класс QQuickPaintedItem
Класс QQuickPaintedItem предоставляет способ использования API QPainter в QML-графическом дереве сцены. Подробнее...
| Заголовок: | #include <QQuickPaintedItem> |
| qmake: | QT += quick |
| Наследует: | QQuickItem |
Открытые типы
| перечисление | PerformanceHint { FastFBOResizing } |
| флаги | PerformanceHints |
| перечисление | RenderTarget { Image, FramebufferObject, InvertedYFramebufferObject } |
Свойства
- fillColor : QColor
- renderTarget : RenderTarget
- textureSize : QSize
- 23 свойства унаследованы от QQuickItem
- 1 свойство унаследовано от QObject
Открытые функции
| QQuickPaintedItem(QQuickItem *parent = Q_NULLPTR) | |
| виртуальный | ~QQuickPaintedItem() |
| bool | antialiasing() const |
| QColor | fillColor() const |
| bool | mipmap() const |
| bool | opaquePainting() const |
| виртуальный void | paint(QPainter *painter) = 0 |
| PerformanceHints | performanceHints() const |
| RenderTarget | renderTarget() const |
| void | setAntialiasing(bool enable) |
| void | setFillColor(const QColor &) |
| void | setMipmap(bool enable) |
| void | setOpaquePainting(bool opaque) |
| void | setPerformanceHint(PerformanceHint hint, bool enabled = true) |
| void | setPerformanceHints(PerformanceHints hints) |
| void | setRenderTarget(RenderTarget target) |
| void | setTextureSize(const QSize &size) |
| QSize | textureSize() const |
| void | update(const QRect &rect = QRect()) |
Переопределённые открытые функции
| виртуальный bool | isTextureProvider() const |
| виртуальный QSGTextureProvider * | textureProvider() const |
- 95 открытых функций унаследовано от QQuickItem
- 32 открытых функций унаследовано от QObject
- 2 открытых функции унаследовано от QQmlParserStatus
Сигналы
| void | fillColorChanged() |
| void | renderTargetChanged() |
| void | textureSizeChanged() |
- 1 сигнал унаследован от QQuickItem
- 2 сигнала унаследованных от QObject
Реализованные защищённые функции
| виртуальный void | itemChange(ItemChange, const ItemChangeData &) |
| виртуальный void | releaseResources() |
| виртуальный QSGNode * | updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) |
- 33 защищённых функции унаследованные от QQuickItem
- 9 защищённых функций унаследованных от QObject
Дополнительные унаследованные члены
- 1 общедоступный слот унаследованный от QQuickItem
- 1 общедоступный слот унаследованный от QObject
- 11 статических общедоступных членов унаследованных от QObject
- 33 защищённых функций унаследованных от QQuickItem
- 9 защищённых функций унаследованных от 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::PerformanceHintflags 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 с использованием движка рисования GL. Рисование может быть быстрее, так как загрузка текстур не требуется, но качество сглаживания не так хорошо, как при использовании изображения. Эта целевая область рендеринга позволяет более быстрое рендеринг в некоторых случаях, но следует избегать её использования, если элемент часто изменяет размер. |
QQuickPaintedItem::InvertedYFramebufferObject |
2 |
Точно так же, как и для FramebufferObject выше, за исключением того, что после завершения рисования, перед отрисовкой нарисованного изображения оно переворачивается по оси X, так что самые верхние пиксели теперь находятся внизу. Поскольку это выполняется с координатами текстуры OpenGL, это гораздо более быстрый способ достижения этого эффекта, чем использование преобразования painter. |
См. также 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. Запросы на эти значения будут проигнорированы.
Функции доступа:
| RenderTarget | renderTarget() const |
| void | setRenderTarget(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 = Q_NULLPTR)
Создаёт QQuickPaintedItem с заданным элементом parent.
[virtual] QQuickPaintedItem::~QQuickPaintedItem()
Уничтожает QQuickPaintedItem.
bool QQuickPaintedItem::antialiasing() const
Возвращает true, если сглаживание включено, в противном случае возвращается false.
По умолчанию сглаживание выключено.
См. также setAntialiasing().
[virtual] bool QQuickPaintedItem::isTextureProvider() const
Переопределено из QQuickItem::isTextureProvider().
[virtual protected] void QQuickPaintedItem::itemChange(ItemChange, const ItemChangeData &)
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.
PerformanceHints QQuickPaintedItem::performanceHints() const
Возвращает параметры производительности.
По умолчанию параметры производительности не включены.
См. также setPerformanceHint() и setPerformanceHints().
[virtual protected] void QQuickPaintedItem::releaseResources()
Переопределено из QQuickItem::releaseResources().
void QQuickPaintedItem::setAntialiasing(bool enable)
Если enable имеет значение true, отображение сглаживания включено.
По умолчанию сглаживание отключено.
См. также antialiasing().
void QQuickPaintedItem::setMipmap(bool enable)
Если enable имеет значение true, сглаживание по пирамидальным уровням (mipmapping) включено для связанной текстуры.
Mipmapping повышает скорость отрисовки и уменьшает артефакты сглаживания, когда элемент масштабируется.
По умолчанию mipmapping отключен.
См. также mipmap().
void QQuickPaintedItem::setOpaquePainting(bool opaque)
Если opaque имеет значение true, элемент является непрозрачным; в противном случае он считается полупрозрачным.
Непрозрачные элементы не смешиваются с остальной частью сцены. Установите значение true, если содержимое элемента непрозрачно, чтобы ускорить отрисовку.
По умолчанию элементы с отрисовкой не являются непрозрачными.
См. также opaquePainting().
void QQuickPaintedItem::setPerformanceHint(PerformanceHint hint, bool enabled = true)
Устанавливает указанный параметр производительности hint для элемента, если enabled имеет значение true; в противном случае параметр производительности сбрасывается.
По умолчанию параметры производительности не включены.
См. также setPerformanceHints() и performanceHints().
void QQuickPaintedItem::setPerformanceHints(PerformanceHints hints)
Устанавливает параметры производительности в hints.
По умолчанию параметры производительности не включены.
См. также setPerformanceHint() и performanceHints().
[virtual] QSGTextureProvider *QQuickPaintedItem::textureProvider() const
Переопределено из QQuickItem::textureProvider().
void QQuickPaintedItem::update(const QRect &rect = QRect())
Планирует перерисовку области, покрываемой rect в этом элементе. Вы можете вызвать эту функцию всякий раз, когда ваш элемент нужно перерисовать, например, если он изменяет свой вид или размер.
Эта функция не вызывает немедленной отрисовки; вместо этого она планирует запрос на отрисовку, который обрабатывается графическим процессором QML при отрисовке следующего кадра. Элемент будет перерисован только в том случае, если он виден.
См. также paint().
[virtual protected] QSGNode *QQuickPaintedItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
Переопределено из QQuickItem::updatePaintNode().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qquickpainteditem.html