QQuickFramebufferObject Class
Die Klasse „QQuickFramebufferObject“ ist eine Hilfsklasse zur Integration von OpenGL-Rendering mithilfe eines Framebuffer-Objekts (FBO) in „ Qt Quick “. Mehr...
| Header: | #include <QQuickFramebufferObject> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| Erbt von: | 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 |
Neu implementierte öffentliche Funktionen
| virtual bool | isTextureProvider() const override |
| virtual void | releaseResources() override |
| virtual QSGTextureProvider * | textureProvider() const override |
Signale
| void | mirrorVerticallyChanged(bool) |
| void | textureFollowsItemSizeChanged(bool) |
Ausführliche Beschreibung
Warnung: Diese Klasse ist nur funktionsfähig, wenn „ Qt Quick “ über OpenGL rendert. Sie ist nicht kompatibel mit anderen Grafik-APIs wie Vulkan oder Metal. Sie sollte als veraltete Klasse betrachtet werden, die nur vorhanden ist, um Qt-5-Anwendungen ein Funktionieren ohne Bruch der Quellkompatibilität zu ermöglichen, solange sie an OpenGL gebunden sind.
Auf den meisten Plattformen erfolgt die Darstellung in einem eigenen Thread. Aus diesem Grund erzwingt die Klasse `QQuickFramebufferObject` eine strikte Trennung zwischen der Implementierung der Elemente und der FBO-Darstellung. Die gesamte Item-Logik, wie z. B. Eigenschaften und UI-bezogene Hilfsfunktionen, die von QML benötigt werden, sollte in einer Unterklasse der Klasse `QQuickFramebufferObject` untergebracht werden. Alles, was mit der Darstellung zusammenhängt, muss in der Klasse ` QQuickFramebufferObject::Renderer ` untergebracht werden.
Um Race-Conditions und Lese-/Schreibkonflikte zwischen zwei Threads zu vermeiden, ist es wichtig, dass der Renderer und das Element niemals gemeinsam genutzte Variablen lesen oder schreiben. Die Kommunikation zwischen dem Element und dem Renderer sollte in erster Linie über die Funktion ` QQuickFramebufferObject::Renderer::synchronize()` erfolgen. Diese Funktion wird im Render-Thread aufgerufen, während der GUI-Thread gesperrt ist.
Die Verwendung von Verbindungen in der Warteschlange oder von Ereignissen für die Kommunikation zwischen Item und Renderer ist ebenfalls möglich.
Sowohl der Renderer als auch das FBO werden intern speicherverwaltet.
Um in das FBO zu rendern, sollte der Benutzer die `Renderer`-Klasse unterklassen und deren Funktion ` Renderer::render()` neu implementieren. Die `Renderer`-Unterklasse wird von ` createRenderer()` zurückgegeben.
Die Größe des FBO passt sich standardmäßig an die Größe des Elements an. Wenn eine feste Größe bevorzugt wird, setzen Sie ` textureFollowsItemSize ` auf ` false ` und geben Sie eine Textur Ihrer Wahl über ` QQuickFramebufferObject::Renderer::createFramebufferObject()` zurück.
Ab Qt 5.4 ist die Klasse `QQuickFramebufferObject` ein ` texture provider ` und kann direkt in ` ShaderEffects ` und anderen Klassen verwendet werden, die Textur-Provider nutzen.
Siehe auch Szenengraph und Rendering.
Dokumentation zu Eigenschaften
mirrorVertically : bool
Diese Eigenschaft legt fest, 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 lautet „ false “.
Zugriffsfunktionen:
| bool | mirrorVertically() const |
| void | setMirrorVertically(bool enable) |
Notifier-Signal:
| void | mirrorVerticallyChanged(bool) |
textureFollowsItemSize : bool
Diese Eigenschaft legt fest, ob die Größe der Textur des FBO den Abmessungen des Elements „ QQuickFramebufferObject “ entsprechen soll. Wenn diese Eigenschaft auf „false“ gesetzt ist, wird das FBO beim ersten Mal, wenn es angezeigt wird, erstellt. Ist sie auf „true“ gesetzt, wird das FBO jedes Mal neu erstellt, wenn sich die Abmessungen des Elements ändern.
Der Standardwert ist „ true “.
Zugriffsfunktionen:
| bool | textureFollowsItemSize() const |
| void | setTextureFollowsItemSize(bool follows) |
Notifier-Signal:
| void | textureFollowsItemSizeChanged(bool) |
Dokumentation der Mitgliedsfunktionen
QQuickFramebufferObject::QQuickFramebufferObject(QQuickItem *parent = nullptr)
Erstellt ein neues `QQuickFramebufferObject` mit dem übergeordneten Objekt ` parent`.
[pure virtual] QQuickFramebufferObject::Renderer *QQuickFramebufferObject::createRenderer() const
Implementieren Sie diese Funktion neu, 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 gesperrt ist.
[override virtual] bool QQuickFramebufferObject::isTextureProvider() const
Implementiert neu: ` QQuickItem::isTextureProvider()` const.
[override virtual] void QQuickFramebufferObject::releaseResources()
Implementiert: QQuickItem::releaseResources().
[override virtual] QSGTextureProvider *QQuickFramebufferObject::textureProvider() const
Implementiert: ` QQuickItem::textureProvider()` const.
© 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.