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
- mirrorVertically : bool
- textureFollowsItemSize : bool
Ö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
void | mirrorVerticallyChanged(bool) |
void | textureFollowsItemSizeChanged(bool) |
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.