Auf dieser Seite

QCanvasPainterItemRenderer Class

Der QCanvasPainterItemRenderer verwaltet alle Malvorgänge für ein QCanvasPainterItem. Mehr...

Kopfzeile: #include <QCanvasPainterItemRenderer>
CMake: find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)
target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter)
Seit: Qt 6.11
Erbt: QQuickRhiItemRenderer
Status: Technische Vorschau

Öffentliche Funktionen

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

Geschützte Funktionen

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)

Reimplementierte geschützte Funktionen

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

Ausführliche Beschreibung

Implementieren Sie die Methode paint(), um das Rendering durchzuführen.

Implementieren Sie synchronize(), um Daten aus dem Objekt auf eine thread-sichere Weise an den Renderer weiterzugeben.

Das Renderer-Objekt lebt und arbeitet auf dem Render-Thread desQt Quick -Szenengraphs, falls es einen gibt, da dies der Thread ist, auf dem createItemRenderer() und alle Funktionen in dieser Klasse aufgerufen werden.

Wenn das QCanvasPainterItem auf einen anderen window verschoben wird, wird es mit einem neuen QRhi verbunden. Daher wird das Renderer-Objekt automatisch zerstört und ein neues durch erneuten Aufruf von createItemRenderer() erstellt. Dies ermöglicht eine einfache Verwaltung der Objekte QCanvasImage und QCanvasOffscreenCanvas, da sie Mitgliedsvariablen im Renderer sein können, die entweder in initializeResources() oder in paint() eingerichtet werden, ohne dass sie zurückgesetzt werden müssen, wenn die Grafikressourcen durch den Wechsel des Fensters und QRhi verloren gehen, da dies alles implizit durch die Zerstörung des gesamten Renderer-Objekts geschieht.

Der folgende Codeschnipsel zeigt die typische Struktur einer QCanvasPainterItemRenderer-Unterklasse. Siehe QCanvasPainterItem für ein Beispiel der Klasse 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;
};

Siehe auch QCanvasPainterItem.

Dokumentation der Mitgliedsfunktionen

QCanvasPainterItemRenderer::QCanvasPainterItemRenderer()

Konstruiert einen QCanvasPainterItemRenderer.

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

Zerstört die QCanvasPainterItemRenderer.

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

Startet die Aufzeichnung von QCanvasPainter Zeichenbefehlen mit dem Ziel canvas.

Hinweis: Diese Funktion sollte nur von prePaint() aus aufgerufen werden.

beginCanvasPainting() muss immer von der entsprechenden endCanvasPainting() gefolgt werden, bevor man von prePaint() zurückkehrt.

[protected] void QCanvasPainterItemRenderer::endCanvasPainting()

Zeigt das Ende der Zeichnung an, die sich auf die in beginCanvasPainting() angegebene Leinwand bezieht.

Hinweis: Diese Funktion sollte nur von prePaint() aus aufgerufen werden.

beginCanvasPainting() muss immer von der entsprechenden Funktion endCanvasPainting() gefolgt werden, bevor sie von prePaint() zurückkehrt.

QColor QCanvasPainterItemRenderer::fillColor() const

Gibt die aktuelle Füllfarbe des Elements zurück. Diese kann vom übergeordneten QCanvasPainterItem gesetzt werden.

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

Stellt eine Texturrückleseanforderung für canvas.

callback wird entweder vor der Rückkehr der Funktion oder später aufgerufen, abhängig von der zugrunde liegenden QRhi und der 3D-API-Implementierung. Das Zurücklesen von Texturinhalten kann je nach GPU-Architektur eine GPU->CPU-Kopie beinhalten.

bool QCanvasPainterItemRenderer::hasSharedPainter() const

Gibt true zurück, wenn dieser Element-Renderer einen gemeinsamen Painter verwendet.

Siehe auch setSharedPainter.

float QCanvasPainterItemRenderer::height() const

Gibt die Höhe des gemalten Bereichs in logischen Einheiten zurück, ohne scale factor (device pixel ratio). Dies ist normalerweise die gleiche wie die Höhe des Malerelements height, es sei denn, QQuickRhiItem::fixedColorBufferHeight wurde gesetzt.

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

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

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

Reimplementieren Sie diese Methode, um Ressourcen mit painter zu initialisieren. Sie wird einmal vor dem ersten synchronize() aufgerufen.

Hinweis: Diese Funktion wird nicht aufgerufen, wenn sich die Größe von QCanvasPainterItem ändert.

Siehe auch QCanvasPainter::addImage und QCanvasPainter::createCanvas.

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

Reimplementieren Sie diese Methode, um mit painter zu malen.

Sie wird aufgerufen, nachdem das Element mit fillColor() gefüllt wurde.

paint() wird vom Renderer-Thread aufgerufen. Um sicher auf die Elementdaten zuzugreifen, kopieren Sie sie in synchronize().

Siehe auch synchronize().

QCanvasPainter *QCanvasPainterItemRenderer::painter() const

Gibt den Maler zurück, der mit diesem Malerelement verbunden ist.

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

Diese Funktion wird zu Beginn des Renderings mit painter aufgerufen, vor paint().

Es ist kein Rendering-Ziel aktiv, wenn diese Funktion aufgerufen wird. Rufen Sie beginCanvasPainting() auf, um das Zeichnen in einem Offscreen-Canvas zu initialisieren.

Siehe auch beginCanvasPainting() und endCanvasPainting().

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

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

void QCanvasPainterItemRenderer::setSharedPainter(bool enable)

Deaktivieren Sie die gemeinsame Nutzung von Malern, wenn enable false lautet.

Die gemeinsame Nutzung von Malern ist standardmäßig aktiviert.

Wenn die gemeinsame Nutzung von Malern aktiviert ist, verwenden alle Malerelemente innerhalb desselben QQuickWindow denselben QCanvasPainter.

Wenn die gemeinsame Nutzung von Malern deaktiviert werden soll, muss diese Funktion früh genug aufgerufen werden, zum Beispiel im Konstruktor der abgeleiteten Klasse. Eine nachträgliche Änderung der Funktion, wenn das Element bereits für das Malen initialisiert wurde, hat keine Auswirkungen mehr.

Wenn zwei Elemente dedizierte, nicht gemeinsam genutzte Maler verwenden, sind die Grafikressourcen des jeweils anderen Elements, wie z.B. QCanvasImage oder QOffscreenCanvas, für sie nicht sichtbar. Befinden sich die Elemente hingegen im selben Fenster und ist die gemeinsame Nutzung aktiviert, können sie Bilder oder Leinwände verwenden, die vom anderen Element erstellt wurden, da sie beide dieselbe QCanvasPainter verwenden.

Hinweis: Selbst wenn enable aktiviert ist, werden die Maler nicht zwischen Objekten geteilt, die zu verschiedenen QQuickWindow Instanzen gehören, und damit auch nicht zu verschiedenen Szenegraphen.

Siehe auch hasSharedPainter.

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

Reimplementieren Sie diese Methode, um Daten zwischen item und Item-Painter-Instanzen zu synchronisieren. Sie wird vor paint() jedes Mal aufgerufen, wenn das Element neu gezeichnet werden muss.

Diese Methode ist der einzige Ort, an dem es für den Painter und das Item sicher ist, die Variablen des jeweils anderen zu lesen und zu schreiben.

Normalerweise sollten Sie static_cast item auf Ihren realen Elementtyp anwenden und dann die Daten austauschen.

Hinweis: Stellen Sie sicher, dass Sie diese Überladung neu implementieren, indem Sie ein QCanvasPainterItem verwenden, anstatt base class' version, das ein QQuickRhiItem verwendet.

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

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

float QCanvasPainterItemRenderer::width() const

Gibt die Breite des gemalten Bereichs in logischen Einheiten zurück, ohne scale factor (device pixel ratio). Dies ist normalerweise die gleiche wie die width des Malers, es sei denn, QQuickRhiItem::fixedColorBufferWidth wurde gesetzt.

© 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.