QQuickFramebufferObject Class

Die Klasse QQuickFramebufferObject ist eine Komfortklasse zur Integration von OpenGL-Rendering unter Verwendung eines Framebuffer-Objekts (FBO) mit Qt Quick. Mehr...

Kopfzeile: #include <QQuickFramebufferObject>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
Vererbungen: QQuickItem

Öffentliche Typen

class Renderer

Eigenschaften

Öffentliche Funktionen

QQuickFramebufferObject(QQuickItem *parent = nullptr)
virtual QQuickFramebufferObject::Renderer *createRenderer() const = 0
bool mirrorVertically() const
void setMirrorVertically(bool enable)
void setTextureFollowsItemSize(bool follows)
bool textureFollowsItemSize() const

Reimplementierte öffentliche Funktionen

virtual bool isTextureProvider() const override
virtual void releaseResources() override
virtual QSGTextureProvider *textureProvider() const override

Signale

Detaillierte Beschreibung

Warnung: Diese Klasse ist nur funktionsfähig, wenn Qt Quick über OpenGL gerendert wird. Sie ist nicht kompatibel mit anderen Grafik-APIs, wie Vulkan oder Metal. Sie sollte als Legacy-Klasse behandelt werden, die nur vorhanden ist, damit Qt 5-Anwendungen ohne Quellkompatibilitätsbrüche funktionieren können, solange sie an OpenGL gebunden sind.

Auf den meisten Plattformen wird das Rendering auf einem dedizierten Thread stattfinden. Aus diesem Grund erzwingt die QQuickFramebufferObject-Klasse eine strikte Trennung zwischen der Item-Implementierung und dem FBO-Rendering. Die gesamte Elementlogik, wie Eigenschaften und UI-bezogene Hilfsfunktionen, die von QML benötigt werden, sollten in einer Unterklasse der Klasse QQuickFramebufferObject untergebracht werden. Alles, was sich auf das Rendering bezieht, muss sich in der Klasse QQuickFramebufferObject::Renderer befinden.

Um Race Conditions und Lese-/Schreibprobleme von zwei Threads zu vermeiden, ist es wichtig, dass der Renderer und das Item niemals gemeinsame Variablen lesen oder schreiben. Die Kommunikation zwischen dem Element und dem Renderer sollte hauptsächlich über die Funktion QQuickFramebufferObject::Renderer::synchronize() erfolgen. Diese Funktion wird im Render-Thread aufgerufen, während der GUI-Thread blockiert ist.

Die Verwendung von Warteschlangenverbindungen oder Ereignissen für die Kommunikation zwischen Element und Renderer ist ebenfalls möglich.

Sowohl der Renderer als auch das FBO werden intern im Speicher verwaltet.

Um in den FBO zu rendern, sollte der Benutzer die Klasse Renderer unterklassifizieren und ihre Funktion Renderer::render() neu implementieren. Die Renderer-Unterklasse wird von createRenderer() zurückgegeben.

Die Größe des FBO wird standardmäßig an die Größe des Elements angepasst. Wenn eine feste Größe bevorzugt wird, setzen Sie textureFollowsItemSize auf false und geben Sie eine Textur Ihrer Wahl von QQuickFramebufferObject::Renderer::createFramebufferObject() zurück.

Ab Qt 5.4 ist die Klasse QQuickFramebufferObject eine texture provider und kann direkt in ShaderEffects und anderen Klassen verwendet werden, die Texturanbieter nutzen.

Siehe auch Scene Graph und Rendering.

Dokumentation der Eigenschaften

mirrorVertically : bool

Diese Eigenschaft steuert, ob die Größe des FBO-Inhalts beim Zeichnen vertikal gespiegelt werden soll. Dies ermöglicht die einfache Integration von Rendering-Code von Drittanbietern, der nicht den Standarderwartungen entspricht.

Der Standardwert ist false.

Zugriffsfunktionen:

bool mirrorVertically() const
void setMirrorVertically(bool enable)

Benachrichtigungssignal:

void mirrorVerticallyChanged(bool)

textureFollowsItemSize : bool

Diese Eigenschaft steuert, ob die Größe der FBO-Textur den Abmessungen des Elements QQuickFramebufferObject folgen soll. Wenn diese Eigenschaft auf "false" gesetzt ist, wird das FBO einmalig erstellt, wenn es zum ersten Mal angezeigt wird. Wenn sie auf true gesetzt ist, wird das FBO jedes Mal neu erstellt, wenn sich die Abmessungen des Objekts ändern.

Der Standardwert ist true.

Zugriffsfunktionen:

bool textureFollowsItemSize() const
void setTextureFollowsItemSize(bool follows)

Benachrichtigungssignal:

void textureFollowsItemSizeChanged(bool)

Member Function Dokumentation

QQuickFramebufferObject::QQuickFramebufferObject(QQuickItem *parent = nullptr)

Konstruiert ein neues QQuickFramebufferObject mit übergeordnetem parent.

[pure virtual] QQuickFramebufferObject::Renderer *QQuickFramebufferObject::createRenderer() const

Reimplementieren Sie diese Funktion, um einen Renderer zu erstellen, der zum Rendern in das FBO verwendet wird.

Diese Funktion wird im Rendering-Thread aufgerufen, während der GUI-Thread blockiert ist.

[override virtual] bool QQuickFramebufferObject::isTextureProvider() const

Reimplements: QQuickItem::isTextureProvider() const.

[override virtual] void QQuickFramebufferObject::releaseResources()

Reimplements: QQuickItem::releaseResources().

[override virtual] QSGTextureProvider *QQuickFramebufferObject::textureProvider() const

Reimplements: QQuickItem::textureProvider() const.

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