En esta página

QCanvasPainterItemRenderer Class

El QCanvasPainterItemRenderer maneja toda la pintura para un QCanvasPainterItem. Más...

Cabecera: #include <QCanvasPainterItemRenderer>
CMake: find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)
target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter)
Desde: Qt 6.11
Hereda de: QQuickRhiItemRenderer
Estado: Technical Preview

Funciones Públicas

QCanvasPainterItemRenderer()
virtual ~QCanvasPainterItemRenderer() override
QColor fillColor() const
bool hasSharedPainter() const
float height() const
QCanvasPainter *painter() const
void setSharedPainter(bool enable)
float width() const

Funciones protegidas

void beginCanvasPainting(QCanvasOffscreenCanvas &canvas)
void endCanvasPainting()
void grabCanvas(const QCanvasOffscreenCanvas &canvas, std::function<void (const QImage &)> callback)
virtual void initializeResources(QCanvasPainter *painter)
virtual void paint(QCanvasPainter *painter)
virtual void prePaint(QCanvasPainter *painter)
virtual void synchronize(QCanvasPainterItem *item)

Funciones protegidas reimplementadas

virtual void initialize(QRhiCommandBuffer *cb) override
virtual void render(QRhiCommandBuffer *cb) override
virtual void synchronize(QQuickRhiItem *item) override

Descripción detallada

Implementa el método paint() para realizar el renderizado.

Para exponer los datos del elemento al renderizador de una manera segura, implemente synchronize().

El objeto renderizador vive y opera en el hilo de renderizado del gráfico de escenaQt Quick , si existe, ya que ese es el hilo en el que se invocan createItemRenderer() y todas las funciones de esta clase.

Si el QCanvasPainterItem se mueve a un window diferente, se asociará con un nuevo QRhi. Por lo tanto, el objeto renderizador se destruye automáticamente, y se crea uno nuevo invocando de nuevo a createItemRenderer(). Esto permite una gestión sencilla de los objetos QCanvasImage y QCanvasOffscreenCanvas, ya que pueden ser variables miembro del renderizador, configuradas en initializeResources() o en paint(), sin tener que reiniciarlas cuando se pierden los recursos gráficos debido al cambio de ventana y QRhi, ya que todo ocurre implícitamente por la destrucción del objeto renderizador completo.

El siguiente fragmento de código muestra la estructura típica de una subclase QCanvasPainterItemRenderer. Ver QCanvasPainterItem para un ejemplo de la clase MyItem.

class MyRenderer : public QCanvasPainterItemRenderer
{
public:
    void synchronize(QCanvasPainterItem *item) override
    {
        // copy a custom property value from item in a thread-safe manner
        m_value = static_cast<MyItem *>(item)->value();
    }

    void initializeResources(QCanvasPainter *p) override
    {
        // load assets
        if (m_image.isNull())
            m_image = p->addImage(QImage("image.png"), QCanvasPainter::ImageFlag::Repeat);
    }

    void prePaint(QCanvasPainter *p) override
    {
        // this is where offscreen canvases are drawn into
        if (m_canvas.isNull()) {
            m_canvas = p->createCanvas(QSize(640, 480));
            beginCanvasPainting(m_canvas);
            // ... draw into the offscreen canvas
            endCanvasPainting(m_canvas);
            m_canvasImage = p->addImage(m_canvas);
        }
    }

    void paint(QCanvasPainter *p) override
    {
        QPointF center(width() / 2, height() / 2);
        // ... draw using m_value, m_image, and m_canvasImage
    }

    QCanvasImage m_image;
    QCanvasOffscreenCanvas m_canvas;
    QCanvasImage m_canvasImage;
    float m_value;
};

Ver también QCanvasPainterItem.

Documentación de Funciones Miembro

QCanvasPainterItemRenderer::QCanvasPainterItemRenderer()

Construye un QCanvasPainterItemRenderer.

[override virtual noexcept] QCanvasPainterItemRenderer::~QCanvasPainterItemRenderer()

Destruye el QCanvasPainterItemRenderer.

[protected] void QCanvasPainterItemRenderer::beginCanvasPainting(QCanvasOffscreenCanvas &canvas)

Inicia la grabación de los comandos de dibujo de QCanvasPainter dirigidos a canvas.

Nota: Esta función sólo debe ser llamada desde prePaint().

beginCanvasPainting() siempre debe ir seguida de la correspondiente endCanvasPainting() antes de volver de prePaint().

[protected] void QCanvasPainterItemRenderer::endCanvasPainting()

Indica el final del dibujo dirigido al lienzo especificado en beginCanvasPainting().

Nota: Esta función sólo debe ser llamada desde prePaint().

beginCanvasPainting() debe ir siempre seguida de la correspondiente endCanvasPainting() antes de volver de prePaint().

QColor QCanvasPainterItemRenderer::fillColor() const

Devuelve el color de relleno actual del elemento. Esto puede ser establecido por el padre QCanvasPainterItem.

[protected] void QCanvasPainterItemRenderer::grabCanvas(const QCanvasOffscreenCanvas &canvas, std::function<void (const QImage &)> callback)

Emite una solicitud de lectura de textura para canvas.

callback es invocada antes de que la función retorne, o más tarde, dependiendo de QRhi y de la implementación de la API 3D. La lectura del contenido de la textura puede implicar una copia GPU->CPU, dependiendo de la arquitectura de la GPU.

bool QCanvasPainterItemRenderer::hasSharedPainter() const

Devuelve true si este renderizador de elementos utiliza un pintor compartido.

Véase también setSharedPainter.

float QCanvasPainterItemRenderer::height() const

Devuelve la altura de la zona pintada, en unidades lógicas, sin el scale factor (device pixel ratio). Suele ser la misma que la del elemento pintor height, a menos que se haya establecido QQuickRhiItem::fixedColorBufferHeight.

[override virtual protected] void QCanvasPainterItemRenderer::initialize(QRhiCommandBuffer *cb)

Reimplementa: QQuickRhiItemRenderer::initialize(QRhiCommandBuffer *cb).

[virtual protected] void QCanvasPainterItemRenderer::initializeResources(QCanvasPainter *painter)

Reimplemente este método para inicializar recursos utilizando painter. Se llamará una vez antes del primer synchronize().

Nota: Esta función no se llama cuando cambia el tamaño de QCanvasPainterItem.

Véase también QCanvasPainter::addImage y QCanvasPainter::createCanvas.

[virtual protected] void QCanvasPainterItemRenderer::paint(QCanvasPainter *painter)

Reimplemente este método para pintar usando painter.

Esto será llamado después de que el ítem haya sido llenado con fillColor().

paint() es llamado desde el hilo de renderizado. Para acceder a los datos del elemento de forma segura, cópielos en synchronize().

Ver también synchronize().

QCanvasPainter *QCanvasPainterItemRenderer::painter() const

Devuelve el pintor adjunto a este elemento pintor.

[virtual protected] void QCanvasPainterItemRenderer::prePaint(QCanvasPainter *painter)

Esta función se invoca al inicio de la renderización utilizando painter, antes de paint().

No hay ningún objetivo de renderizado activo cuando se invoca esta función. Llama a beginCanvasPainting() para inicializar el dibujo en un lienzo fuera de pantalla.

Ver también beginCanvasPainting() y endCanvasPainting().

[override virtual protected] void QCanvasPainterItemRenderer::render(QRhiCommandBuffer *cb)

Reimplementa: QQuickRhiItemRenderer::render(QRhiCommandBuffer *cb).

void QCanvasPainterItemRenderer::setSharedPainter(bool enable)

Desactivar el uso compartido del pintor si enable es false.

La compartición de pintores está activada por defecto.

Cuando la compartición de pintores está activada, todos los pintores dentro del mismo QQuickWindow utilizarán el mismo QCanvasPainter.

Si se desea desactivar la compartición de pintor, esta función debe ser llamada con suficiente antelación, por ejemplo desde el constructor de la clase derivada. Cambiarla después, cuando el elemento ya se ha inicializado para pintar, no tendrá ningún efecto.

Si dos elementos utilizan pintores dedicados, no compartidos, los recursos gráficos del otro, como los que respaldan QCanvasImage o QOffscreenCanvas, no serán visibles para ellos. Mientras que si los elementos están en la misma ventana, y el uso compartido está activado, pueden utilizar imágenes o lienzos creados por el otro elemento, porque ambos utilizan el mismo QCanvasPainter.

Nota: Incluso cuando enable es verdadero, los pintores no se comparten entre elementos que pertenecen a diferentes instancias de QQuickWindow, y por extensión, a diferentes gráficos de escena.

Véase también hasSharedPainter.

[virtual protected] void QCanvasPainterItemRenderer::synchronize(QCanvasPainterItem *item)

Reimplemente este método para sincronizar los datos entre item y las instancias del pintor de elementos. Será llamado antes de paint() cada vez que el item necesite ser repintado.

Este método es el único lugar donde es seguro para el pintor y el item leer y escribir las variables del otro.

Normalmente deberías static_cast item a tu tipo de item real, y luego intercambiar los datos.

Nota: Asegúrese de reimplementar esta sobrecarga, tomando un QCanvasPainterItem, en lugar del base class' version que toma un QQuickRhiItem.

[override virtual protected] void QCanvasPainterItemRenderer::synchronize(QQuickRhiItem *item)

Reimplementa: QQuickRhiItemRenderer::synchronize(QQuickRhiItem *item).

float QCanvasPainterItemRenderer::width() const

Devuelve la anchura de la zona pintada, en unidades lógicas, sin el scale factor (device pixel ratio). Suele ser la misma que la del elemento pintor width, a menos que se haya establecido QQuickRhiItem::fixedColorBufferWidth.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.