QQuickWindow Class
Die Klasse QQuickWindow stellt das Fenster für die Darstellung einer grafischen QML-Szene zur Verfügung. Mehr...
Kopfzeile: | #include <QQuickWindow> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake: | QT += quick |
In QML: | Window |
Vererbt: | QWindow |
Vererbt von: |
Öffentliche Typen
struct | GraphicsStateInfo |
enum | CreateTextureOption { TextureHasAlphaChannel, TextureHasMipmaps, TextureOwnsGLTexture, TextureCanUseAtlas, TextureIsOpaque } |
flags | CreateTextureOptions |
enum | RenderStage { BeforeSynchronizingStage, AfterSynchronizingStage, BeforeRenderingStage, AfterRenderingStage, AfterSwapStage, NoStage } |
enum | SceneGraphError { ContextNotAvailable } |
enum | TextRenderType { QtTextRendering, NativeTextRendering, CurveTextRendering } |
Eigenschaften
- activeFocusItem : QQuickItem* const
- color : QColor
- contentItem : QQuickItem* const
- transientParent : QWindow* const
Öffentliche Funktionen
QQuickWindow(QQuickRenderControl *control) | |
QQuickWindow(QWindow *parent = nullptr) | |
virtual | ~QQuickWindow() override |
QQuickItem * | activeFocusItem() const |
void | beginExternalCommands() |
QColor | color() const |
QQuickItem * | contentItem() const |
QSGImageNode * | createImageNode() const |
QSGNinePatchNode * | createNinePatchNode() const |
QSGRectangleNode * | createRectangleNode() const |
(since 6.7) QSGTextNode * | createTextNode() const |
QSGTexture * | createTextureFromImage(const QImage &image, QQuickWindow::CreateTextureOptions options) const |
QSGTexture * | createTextureFromImage(const QImage &image) const |
(since 6.6) QSGTexture * | createTextureFromRhiTexture(QRhiTexture *texture, QQuickWindow::CreateTextureOptions options = {}) const |
qreal | effectiveDevicePixelRatio() const |
void | endExternalCommands() |
QImage | grabWindow() |
(since 6.0) QQuickGraphicsConfiguration | graphicsConfiguration() const |
(since 6.0) QQuickGraphicsDevice | graphicsDevice() const |
const QQuickWindow::GraphicsStateInfo & | graphicsStateInfo() |
QQmlIncubationController * | incubationController() const |
bool | isPersistentGraphics() const |
bool | isPersistentSceneGraph() const |
bool | isSceneGraphInitialized() const |
(since 6.0) QQuickRenderTarget | renderTarget() const |
QSGRendererInterface * | rendererInterface() const |
(since 6.6) QRhi * | rhi() const |
void | scheduleRenderJob(QRunnable *job, QQuickWindow::RenderStage stage) |
void | setColor(const QColor &color) |
(since 6.0) void | setGraphicsConfiguration(const QQuickGraphicsConfiguration &config) |
(since 6.0) void | setGraphicsDevice(const QQuickGraphicsDevice &device) |
void | setPersistentGraphics(bool persistent) |
void | setPersistentSceneGraph(bool persistent) |
(since 6.0) void | setRenderTarget(const QQuickRenderTarget &target) |
(since 6.6) QRhiSwapChain * | swapChain() const |
Reimplementierte öffentliche Funktionen
virtual QAccessibleInterface * | accessibleRoot() const override |
Öffentliche Slots
void | releaseResources() |
void | update() |
Signale
void | activeFocusItemChanged() |
void | afterAnimating() |
(since 6.0) void | afterFrameEnd() |
void | afterRenderPassRecording() |
void | afterRendering() |
void | afterSynchronizing() |
(since 6.0) void | beforeFrameBegin() |
void | beforeRenderPassRecording() |
void | beforeRendering() |
void | beforeSynchronizing() |
void | colorChanged(const QColor &) |
void | frameSwapped() |
void | sceneGraphAboutToStop() |
void | sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message) |
void | sceneGraphInitialized() |
void | sceneGraphInvalidated() |
Statische öffentliche Mitglieder
(since 6.0) QSGRendererInterface::GraphicsApi | graphicsApi() |
bool | hasDefaultAlphaBuffer() |
QString | sceneGraphBackend() |
void | setDefaultAlphaBuffer(bool useAlpha) |
(since 6.0) void | setGraphicsApi(QSGRendererInterface::GraphicsApi api) |
void | setSceneGraphBackend(const QString &backend) |
void | setTextRenderType(QQuickWindow::TextRenderType renderType) |
QQuickWindow::TextRenderType | textRenderType() |
Reimplementierte geschützte Funktionen
virtual void | closeEvent(QCloseEvent *e) override |
virtual bool | event(QEvent *event) override |
virtual void | exposeEvent(QExposeEvent *) override |
virtual void | focusInEvent(QFocusEvent *ev) override |
virtual void | focusOutEvent(QFocusEvent *ev) override |
virtual void | hideEvent(QHideEvent *) override |
virtual void | keyPressEvent(QKeyEvent *e) override |
virtual void | keyReleaseEvent(QKeyEvent *e) override |
virtual void | mouseDoubleClickEvent(QMouseEvent *event) override |
virtual void | mouseMoveEvent(QMouseEvent *event) override |
virtual void | mousePressEvent(QMouseEvent *event) override |
virtual void | mouseReleaseEvent(QMouseEvent *event) override |
virtual void | resizeEvent(QResizeEvent *ev) override |
virtual void | showEvent(QShowEvent *) override |
virtual void | tabletEvent(QTabletEvent *event) override |
virtual void | wheelEvent(QWheelEvent *event) override |
Detaillierte Beschreibung
QQuickWindow bietet die grafische Szenenverwaltung, die für die Interaktion mit und die Anzeige einer Szene von QQuickItems benötigt wird.
Ein QQuickWindow hat immer ein einziges unsichtbares Stammelement. Um Elemente zu diesem Fenster hinzuzufügen, reparieren Sie die Elemente an das Stammelement oder an ein bestehendes Element in der Szene.
Zur einfachen Anzeige einer Szene aus einer QML-Datei siehe QQuickView.
Rendering
QQuickWindow verwendet einen Szenengraphen, um darzustellen, was gerendert werden muss. Dieser Szenegraph ist von der QML-Szene getrennt und befindet sich je nach Plattformimplementierung möglicherweise in einem anderen Thread. Da der Rendering-Szenengraph unabhängig von der QML-Szene lebt, kann er auch vollständig freigegeben werden, ohne den Zustand der QML-Szene zu beeinflussen.
Das Signal sceneGraphInitialized() wird auf dem Rendering-Thread ausgegeben, bevor die QML-Szene zum ersten Mal auf den Bildschirm gerendert wird. Wenn der Graph der Rendering-Szene freigegeben wurde, wird das Signal erneut ausgegeben, bevor das nächste Bild gerendert wird. Ein sichtbares QQuickWindow auf dem Bildschirm wird intern von einem render loop
gesteuert, von dem es mehrere Implementierungen im Szenengraphen gibt. Für Details zum Rendering-Prozess des Szenegraphen, siehe Qt Quick Scene Graph.
Standardmäßig rendert ein QQuickWindow mit einer beschleunigten 3D-Grafik-API, wie OpenGL oder Vulkan. Siehe Scene Graph Adaptations für eine detaillierte Übersicht über Scene Graph Backends und die unterstützten Grafik-APIs.
Warnung: Es ist von entscheidender Bedeutung, dass Grafikoperationen und Interaktionen mit dem Szenengraphen ausschließlich auf dem Rendering-Thread stattfinden, hauptsächlich während der updatePaintNode()-Phase.
Warnung: Da viele der mit dem Rendering zusammenhängenden Signale vom Rendering-Thread ausgegeben werden, sollten die Verbindungen über Qt::DirectConnection hergestellt werden.
Integration mit beschleunigten 3D-Grafik-APIs
Es ist möglich, OpenGL-, Vulkan-, Metal- oder Direct3D 11-Aufrufe direkt in das QQuickWindow zu integrieren, solange das QQuickWindow und der zugrundeliegende Szenegraph mit derselben API gerendert werden. Für den Zugriff auf native Grafikobjekte, wie z.B. Geräte- oder Kontextobjekt-Handles, wird QSGRendererInterface verwendet. Eine Instanz von QSGRendererInterface kann von QQuickWindow durch Aufruf von rendererInterface() abgefragt werden. Die Befähiger für diese Integration sind die Signale beforeRendering(), beforeRenderPassRecording(), afterRenderPassRecording() und verwandte Signale. Diese ermöglichen das Rendern von Underlays oder Overlays. Alternativ dazu ermöglichen QNativeInterface::QSGOpenGLTexture, QNativeInterface::QSGVulkanTexture und andere ähnliche Klassen das Einhüllen einer vorhandenen nativen Textur oder eines Bildobjekts in ein QSGTexture, das dann mit dem Szenengraph verwendet werden kann.
Rendering ohne Beschleunigung
Ein begrenzter, rein softwarebasierter Renderingpfad ist ebenfalls verfügbar. Mit dem software
Backend stehen eine Reihe von Qt Quick Funktionen nicht zur Verfügung, QML-Elemente, die auf diese angewiesen sind, werden nicht gerendert. Gleichzeitig ermöglicht dies, dass QQuickWindow auch auf Systemen funktioniert, auf denen überhaupt keine 3D-Grafik-API verfügbar ist. Siehe Qt Quick Software-Anpassung für weitere Details.
Umgeleitetes Rendering
Ein QQuickWindow muss nicht unbedingt durch ein natives Fenster auf dem Bildschirm unterstützt werden. Das Rendering kann umgeleitet werden, um ein benutzerdefiniertes Rendering-Ziel zu erreichen, wie z.B. eine bestimmte native Textur. Dies wird in Kombination mit der Klasse QQuickRenderControl und Funktionen wie setRenderTarget(), setGraphicsDevice() und setGraphicsConfiguration() erreicht.
In diesem Fall stellt das QQuickWindow die Szene dar und bietet die Infrastruktur für das Rendern eines Frames. Es wird nicht durch eine Rendering-Schleife und ein natives Fenster gestützt. Stattdessen steuert in diesem Fall die Anwendung das Rendering und ersetzt damit effektiv die Renderschleifen. Dies ermöglicht die Erzeugung von Bildsequenzen, das Rendering in Texturen zur Verwendung in externen 3D-Engines oder das Rendering von Qt Quick Inhalten in einer VR-Umgebung.
Ressourcen-Management
QML versucht, Bilder und Knoten des Szenegraphen zwischenzuspeichern, um die Leistung zu verbessern, aber in einigen Szenarien mit geringem Speicherplatz kann es erforderlich sein, diese Ressourcen aggressiv freizugeben. Die Funktion releaseResources() kann verwendet werden, um die Freigabe bestimmter Ressourcen zu erzwingen, insbesondere von Ressourcen, die im Cache gespeichert sind und später wiederhergestellt werden können, wenn sie wieder benötigt werden.
Darüber hinaus kann der Aufruf von releaseResources() zur Freigabe des gesamten Szenegraphen und der zugehörigen Grafikressourcen führen. Wenn dies geschieht, wird das Signal sceneGraphInvalidated() ausgegeben. Dieses Verhalten wird durch die Funktionen setPersistentGraphics() und setPersistentSceneGraph() gesteuert.
Hinweis: Alle Klassen mit dem Präfix QSG sollten nur im Rendering-Thread des Szenegraphen verwendet werden. Siehe Scene Graph und Rendering für weitere Informationen.
Belichtung und Sichtbarkeit
Wenn eine QQuickWindow-Instanz absichtlich mit hide() oder setVisible(false) ausgeblendet wird, hört sie auf zu rendern und ihr Szenegraph und Grafikkontext werden möglicherweise ebenfalls freigegeben. Dies hängt von den Einstellungen ab, die mit setPersistentGraphics() und setPersistentSceneGraph() konfiguriert wurden. Das Verhalten ist in dieser Hinsicht identisch mit dem expliziten Aufruf der Funktion releaseResources(). Ein Fenster kann auch auf andere Weise nicht belichtet, d.h. nicht gerendert, werden. Dies hängt von der Plattform und dem Windowing-System ab. Unter Windows zum Beispiel führt das Minimieren eines Fensters dazu, dass es nicht mehr gerendert wird. Unter macOS bewirkt das vollständige Verdecken eines Fensters durch andere darüber liegende Fenster dasselbe. Unter Linux/X11 ist das Verhalten vom Fenstermanager abhängig.
OpenGL-Kontext und Oberflächenformate
Während es möglich ist, ein QSurfaceFormat für jedes QQuickWindow zu spezifizieren, indem man die Memberfunktion setFormat() aufruft, können Fenster auch von QML aus erstellt werden, indem man die Elemente Window und ApplicationWindow verwendet. In diesem Fall ist kein C++-Code an der Erstellung der Fensterinstanz beteiligt, dennoch möchten Anwendungen möglicherweise bestimmte Werte für das Oberflächenformat festlegen, um beispielsweise eine bestimmte OpenGL-Version oder ein bestimmtes Profil anzufordern. Solche Anwendungen können die statische Funktion QSurfaceFormat::setDefaultFormat() beim Starten aufrufen. Das angegebene Format wird dann für alle danach erstellten Quick-Fenster verwendet.
Vulkan-Instanz
Bei der Verwendung von Vulkan wird ein QQuickWindow automatisch mit einer QVulkanInstance verknüpft, die intern vom Szenegraph erstellt und verwaltet wird. Auf diese Weise müssen sich die meisten Anwendungen nicht darum kümmern, dass eine VkInstance
verfügbar ist, da dies alles automatisch geschieht. In fortgeschrittenen Fällen kann es vorkommen, dass eine Anwendung ihre eigene QVulkanInstance erstellen möchte, um sie auf eine bestimmte Weise zu konfigurieren. Auch das ist möglich. Der Aufruf von setVulkanInstance() auf dem QQuickWindow direkt nach der Erstellung, bevor es sichtbar wird, führt zur Verwendung des von der Anwendung bereitgestellten QVulkanInstance (und des zugrunde liegenden VkInstance
). Bei einer Weiterleitung über QQuickRenderControl wird nicht automatisch QVulkanInstance bereitgestellt, sondern es wird erwartet, dass die Anwendung ihr eigenes bereitstellt und mit dem QQuickWindow verknüpft.
Grafikkontexte und Geräte
Wenn der Szenegraph initialisiert wird, was typischerweise geschieht, wenn das Fenster exponiert wird oder, im Falle des umgeleiteten Renderings, die Initialisierung via QQuickRenderControl durchgeführt wird, werden die für das Rendering notwendigen Kontext- oder Geräteobjekte automatisch erstellt. Dazu gehören OpenGL-Kontexte, Direct3D-Geräte und Gerätekontexte, Vulkan- und Metal-Geräte. Diese sind auch im Nachhinein durch Anwendungscode über QSGRendererInterface abfragbar. Bei Verwendung der basic
Rendering-Schleife, die das gesamte Rendering auf dem GUI-Thread durchführt, wird für alle sichtbaren QQuickWindows derselbe Kontext oder dasselbe Gerät verwendet. Die threaded
Rendering-Schleife verwendet für jeden Rendering-Thread und damit für jedes QQuickWindow ein eigenes Kontext- oder Geräteobjekt. Bei einigen Grafik-APIs gibt es ein gewisses Maß an Anpassungsmöglichkeiten, die über setGraphicsConfiguration() bereitgestellt werden. Dies macht es zum Beispiel möglich, die Liste der Vulkan-Erweiterungen zu spezifizieren, die auf VkDevice
aktiviert werden sollen. Alternativ ist es auch möglich, einen Satz von existierenden Kontext- oder Geräteobjekten zur Verwendung durch das QQuickWindow bereitzustellen, anstatt es sein eigenes konstruieren zu lassen. Dies wird durch setGraphicsDevice() erreicht.
Siehe auch QQuickView, QQuickRenderControl, QQuickRenderTarget, QQuickGraphicsDevice, QQuickGraphicsConfiguration, und QSGRendererInterface.
Dokumentation der Mitgliedstypen
enum QQuickWindow::CreateTextureOption
flags QQuickWindow::CreateTextureOptions
Die Enums von CreateTextureOption werden verwendet, um eine Textur zu wickeln.
Konstante | Wert | Beschreibung |
---|---|---|
QQuickWindow::TextureHasAlphaChannel | 0x0001 | Die Textur hat einen Alphakanal und sollte mit Blending gezeichnet werden. |
QQuickWindow::TextureHasMipmaps | 0x0002 | Die Textur hat Mipmaps und kann mit aktiviertem Mipmapping gezeichnet werden. |
QQuickWindow::TextureOwnsGLTexture | 0x0004 | Ab Qt 6.0 wird dieses Flag in der Praxis nicht verwendet und ignoriert. Das Eigentum an nativen Grafikressourcen kann nicht an das Wrapping QSGTexture übertragen werden, da Qt Quick möglicherweise nicht über die notwendigen Details verfügt, wie ein solches Objekt und der zugehörige Speicher freigegeben werden sollten. |
QQuickWindow::TextureCanUseAtlas | 0x0008 | Das Bild kann in einen Texturatlas hochgeladen werden. |
QQuickWindow::TextureIsOpaque | 0x0010 | Die Textur gibt false für QSGTexture::hasAlphaChannel() zurück und wird nicht überblendet. Dieses Flag wurde in Qt 5.6 hinzugefügt. |
Der Typ CreateTextureOptions ist ein Typedef für QFlags<CreateTextureOption>. Er speichert eine ODER-Kombination von CreateTextureOption-Werten.
enum QQuickWindow::RenderStage
Konstante | Wert | Beschreibung |
---|---|---|
QQuickWindow::BeforeSynchronizingStage | 0 | Vor der Synchronisierung. |
QQuickWindow::AfterSynchronizingStage | 1 | Nach der Synchronisierung. |
QQuickWindow::BeforeRenderingStage | 2 | Vor dem Rendern. |
QQuickWindow::AfterRenderingStage | 3 | Nach dem Rendern. |
QQuickWindow::AfterSwapStage | 4 | Nachdem der Rahmen ausgetauscht wurde. |
QQuickWindow::NoStage | 5 | So schnell wie möglich. Dieser Wert wurde in Qt 5.6 hinzugefügt. |
Siehe auch Scene Graph und Rendering.
enum QQuickWindow::SceneGraphError
Diese Aufzählung beschreibt den Fehler in einem sceneGraphError()-Signal.
Konstante | Wert | Beschreibung |
---|---|---|
QQuickWindow::ContextNotAvailable | 1 | Die Erstellung des Grafikkontexts ist fehlgeschlagen. Dies bedeutet in der Regel, dass keine geeignete OpenGL-Implementierung gefunden wurde, z. B. weil keine Grafiktreiber installiert sind und somit keine OpenGL 2-Unterstützung vorhanden ist. Auf mobilen und eingebetteten Boards, die OpenGL ES verwenden, deutet ein solcher Fehler wahrscheinlich auf Probleme bei der Integration des Windowing-Systems und möglicherweise auf eine falsche Konfiguration von Qt hin. |
enum QQuickWindow::TextRenderType
Diese Aufzählung beschreibt den Standard-Rendering-Typ von textähnlichen Elementen in Qt Quick (Text, TextInput, etc.).
Wählen Sie NativeTextRendering, wenn Sie es vorziehen, dass der Text auf der Zielplattform nativ aussieht und Sie keine erweiterten Funktionen wie die Transformation des Textes benötigen. Die Verwendung solcher Funktionen in Kombination mit dem Rendertyp NativeTextRendering führt zu schlechten und manchmal pixeligen Ergebnissen.
Sowohl QtTextRendering
als auch CurveTextRendering
sind hardwarebeschleunigte Techniken. QtTextRendering
ist die schnellere der beiden Techniken, verbraucht aber mehr Speicher und führt bei großen Formaten zu Rendering-Artefakten. CurveTextRendering
sollte als Alternative in Betracht gezogen werden, wenn QtTextRendering
keine guten visuellen Ergebnisse liefert oder wenn die Reduzierung des Grafikspeicherverbrauchs Priorität hat.
Konstante | Wert | Beschreibung |
---|---|---|
QQuickWindow::QtTextRendering | 0 | Qt's eigenen Rasterungsalgorithmus verwenden. |
QQuickWindow::NativeTextRendering | 1 | Verwendet den systemeigenen Rasterizer des Betriebssystems für Text. |
QQuickWindow::CurveTextRendering | 2 | Text wird mit einem Kurvenrasterer gerendert, der direkt auf der Grafikhardware läuft. (Eingeführt in Qt 6.7.0.) |
Dokumentation der Eigenschaften
[read-only]
activeFocusItem : QQuickItem* const
Diese Eigenschaft enthält das Element, das derzeit den aktiven Fokus hat oder null
, wenn es kein Element mit aktivem Fokus gibt.
Zugriffsfunktionen:
QQuickItem * | activeFocusItem() const |
Benachrichtigungssignal:
void | activeFocusItemChanged() |
Siehe auch QQuickItem::forceActiveFocus() und Tastaturfokus in Qt Quick.
color : QColor
Diese Eigenschaft enthält die Farbe, die verwendet wird, um den Farbpuffer zu Beginn eines jeden Bildes zu löschen.
Standardmäßig ist die Farbe "clear" weiß.
Zugriffsfunktionen:
QColor | color() const |
void | setColor(const QColor &color) |
Benachrichtigungssignal:
void | colorChanged(const QColor &) |
Siehe auch setDefaultAlphaBuffer().
[read-only]
contentItem : QQuickItem* const
Diese Eigenschaft enthält das unsichtbare Stammelement der Szene.
Ein QQuickWindow hat immer ein einziges unsichtbares Stammelement, das seinen gesamten Inhalt enthält. Um Elemente zu diesem Fenster hinzuzufügen, reparieren Sie die Elemente an das contentItem oder an ein bestehendes Element in der Szene.
Zugriffsfunktionen:
QQuickItem * | contentItem() const |
transientParent : QWindow* const
Diese Eigenschaft enthält das Fenster, für das dieses Fenster ein transientes Pop-up ist.
Dies ist ein Hinweis für den Fenstermanager, dass es sich bei diesem Fenster um ein Dialog- oder Popup-Fenster im Namen des übergeordneten Fensters handelt, das eine beliebige Art von QWindow sein kann.
Um zu bewirken, dass das Fenster standardmäßig über dem übergeordneten Fenster zentriert wird, kann es je nach Fenstermanager auch notwendig sein, die Eigenschaft flags mit einem geeigneten Qt::WindowType (z. B. Qt::Dialog
) zu setzen.
Siehe auch parent().
Dokumentation der Mitgliedsfunktionen
[explicit]
QQuickWindow::QQuickWindow(QQuickRenderControl *control)
Konstruiert ein Fenster zur Darstellung einer QML-Szene, deren Rendering durch das Objekt control gesteuert wird. Weitere Informationen entnehmen Sie bitte der Dokumentation von QQuickRenderControl.
[explicit]
QQuickWindow::QQuickWindow(QWindow *parent = nullptr)
Konstruiert ein Fenster zur Darstellung einer QML-Szene mit übergeordnetem Fenster parent.
[override virtual noexcept]
QQuickWindow::~QQuickWindow()
Zerstört das Fenster.
[override virtual]
QAccessibleInterface *QQuickWindow::accessibleRoot() const
Gibt eine Zugänglichkeitsschnittstelle für dieses Fenster zurück, oder 0, wenn eine solche Schnittstelle nicht erstellt werden kann.
[signal]
void QQuickWindow::afterAnimating()
Dieses Signal wird im GUI-Thread ausgegeben, bevor der Render-Thread aufgefordert wird, die Synchronisierung des Szenengraphen durchzuführen.
Im Gegensatz zu den anderen ähnlichen Signalen wird dieses auf dem GUI-Thread und nicht auf dem Render-Thread ausgegeben. Es kann verwendet werden, um externe Animationssysteme mit dem QML-Inhalt zu synchronisieren. Das bedeutet aber auch, dass dieses Signal nicht zum Auslösen von Grafikoperationen geeignet ist.
[signal, since 6.0]
void QQuickWindow::afterFrameEnd()
Dieses Signal wird ausgegeben, wenn der Szenengraf einen Rahmen übermittelt hat. Es wird nach allen anderen damit zusammenhängenden Signalen, wie afterRendering(), ausgegeben. Es ist das letzte Signal, das vom Szenengraphen-Rendering-Thread beim Rendern eines Frames ausgegeben wird.
Hinweis: Im Gegensatz zu frameSwapped() wird dieses Signal garantiert auch dann ausgegeben, wenn die Ausgabe von Qt Quick über QQuickRenderControl umgeleitet wird.
Warnung: Dieses Signal wird vom Szenengraphen-Rendering-Thread ausgegeben. Wenn Ihre Slot-Funktion beendet werden muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch beforeFrameBegin() und rendererInterface().
[signal]
void QQuickWindow::afterRenderPassRecording()
Dieses Signal wird ausgegeben, nachdem der Szenegraph die Befehle für seinen Haupt-Rendering-Durchgang aufgezeichnet hat, der Durchgang aber noch nicht im Befehlspuffer abgeschlossen ist.
Dieses Signal wird früher als afterRendering() ausgegeben und garantiert, dass nicht nur das Bild, sondern auch die Aufzeichnung des Haupt-Rendering-Passes des Szenegraphen noch aktiv ist. Dies ermöglicht das Einfügen von Befehlen, ohne dass ein kompletter, separater Rendering-Durchgang generiert werden muss (was normalerweise die angehängten Bilder löschen würde). Die nativen Grafikobjekte können über QSGRendererInterface abgefragt werden.
Hinweis: Ressourcenaktualisierungen (Uploads, Kopien) können in der Regel nicht innerhalb eines Rendering-Durchgangs in die Warteschlange gestellt werden. Daher müssen komplexere Benutzer-Renderings sowohl mit beforeRendering() als auch mit diesem Signal verbunden werden.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgegeben. Wenn Ihre Slot-Funktion beendet werden muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Siehe auch rendererInterface() und Scene Graph - RHI Under QML.
[signal]
void QQuickWindow::afterRendering()
Das Signal wird ausgegeben, nachdem der Szenengraf seine Befehle in den Befehlspuffer eingefügt hat, der noch nicht an die Grafikwarteschlange übergeben wurde. Falls gewünscht, kann die mit diesem Signal verbundene Slot-Funktion zuvor über QSGRendererInterface native Ressourcen, wie den Befehlspuffer, abfragen. Beachten Sie jedoch, dass der Rendering-Durchgang (oder die Durchgänge) zu diesem Zeitpunkt bereits aufgezeichnet sind und es nicht möglich ist, weitere Befehle innerhalb des Durchgangs des Szenegraphen hinzuzufügen. Verwenden Sie stattdessen afterRenderPassRecording(). Dieses Signal hat daher in Qt 6, anders als in Qt 5, nur begrenzten Nutzen. Vielmehr ist es die Kombination von beforeRendering() und beforeRenderPassRecording() oder beforeRendering() und afterRenderPassRecording(), die typischerweise verwendet wird, um ein Unter- oder Überlagern des benutzerdefinierten Renderings zu erreichen.
Warnung: Dieses Signal wird vom Szenengraphen-Rendering-Thread ausgegeben. Wenn Ihre Slot-Funktion beendet werden muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Hinweis: Beachten Sie bei der Verwendung von OpenGL, dass das Setzen von OpenGL 3.x- oder 4.x-spezifischen Zuständen und das Belassen dieser aktiviert oder auf nicht standardmäßige Werte gesetzt, wenn Sie vom verbundenen Slot zurückkehren, das Rendering des Szenegraphen beeinträchtigen kann. Die QOpenGLContext, die für das Rendering durch den Szenengraphen verwendet wird, wird gebunden, wenn das Signal ausgesendet wird.
Siehe auch rendererInterface(), Scene Graph - RHI unter QML, Scene Graph - OpenGL unter QML, Scene Graph - Metal unter QML, Scene Graph - Vulkan unter QML und Scene Graph - Direct3D 11 unter QML.
[signal]
void QQuickWindow::afterSynchronizing()
Dieses Signal wird ausgegeben, nachdem der Szenegraph mit dem QML-Zustand synchronisiert wurde.
Dieses Signal kann verwendet werden, um Vorbereitungen zu treffen, die nach Aufrufen von QQuickItem::updatePaintNode() erforderlich sind, während der GUI-Thread noch gesperrt ist.
Bei Verwendung von OpenGL wird die QOpenGLContext, die für das Rendering durch den Szenengraphen verwendet wird, zu diesem Zeitpunkt gebunden.
Warnung: Dieses Signal wird vom Szenengraphen-Rendering-Thread ausgegeben. Wenn Ihre Slot-Funktion beendet werden muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Warnung: Beachten Sie bei der Verwendung von OpenGL, dass das Setzen von OpenGL 3.x- oder 4.x-spezifischen Zuständen und das Belassen dieser aktiviert oder auf nicht standardmäßige Werte gesetzt, wenn Sie vom verbundenen Slot zurückkehren, das Rendering des Szenegraphen beeinträchtigen kann.
[signal, since 6.0]
void QQuickWindow::beforeFrameBegin()
Dieses Signal wird ausgesendet, bevor der Szenengraf mit der Vorbereitung des Bildes beginnt. Es geht Signalen wie beforeSynchronizing() oder beforeRendering() voraus. Es ist das früheste Signal, das vom Rendering-Thread des Szenengraphen ausgesendet wird, wenn er mit der Vorbereitung eines neuen Bildes beginnt.
Dieses Signal ist für Grafik-Frameworks auf niedrigerer Ebene von Bedeutung, die bestimmte Vorgänge, wie z. B. die Bereinigung von Ressourcen, zu einem Zeitpunkt ausführen müssen, zu dem Qt Quick die Aufzeichnung eines neuen Frames noch nicht über die zugrunde liegenden Rendering-Hardware-Schnittstellen-APIs eingeleitet hat.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenegraphen ausgegeben. Wenn Ihre Slot-Funktion beendet werden muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch afterFrameEnd() und rendererInterface().
[signal]
void QQuickWindow::beforeRenderPassRecording()
Dieses Signal wird ausgegeben, bevor der Scenegraph mit der Aufzeichnung von Befehlen für den Haupt-Rendering-Durchgang beginnt. (Ebenen haben ihre eigenen Durchgänge und sind zu dem Zeitpunkt, an dem dieses Signal ausgegeben wird, vollständig aufgezeichnet). Der Render-Durchgang ist bereits im Befehlspuffer aktiv, wenn das Signal ausgegeben wird.
Dieses Signal wird später als beforeRendering() ausgegeben und garantiert, dass nicht nur der Frame, sondern auch die Aufzeichnung des Haupt-Rendering-Passes des Szenegraphen aktiv ist. Dies ermöglicht das Einfügen von Befehlen, ohne dass ein kompletter, separater Rendering-Durchgang generiert werden muss (der normalerweise die angehängten Bilder löschen würde). Die nativen Grafikobjekte können über QSGRendererInterface abgefragt werden.
Hinweis: Ressourcenaktualisierungen (Uploads, Kopien) können in der Regel nicht innerhalb eines Rendering-Durchgangs in die Warteschlange gestellt werden. Daher müssen komplexere Benutzer-Renderings sowohl mit beforeRendering() als auch mit diesem Signal verbunden werden.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgegeben. Wenn Ihre Slot-Funktion beendet werden muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Siehe auch rendererInterface() und Scene Graph - RHI Under QML.
[signal]
void QQuickWindow::beforeRendering()
Dieses Signal wird ausgegeben, nachdem die Vorbereitungen für den Rahmen abgeschlossen sind, d. h. gegebenenfalls ein Befehlspuffer im Aufzeichnungsmodus vorhanden ist. Falls gewünscht, kann die mit diesem Signal verbundene Slot-Funktion über QSGRendererInterface native Ressourcen abfragen, wie der Befehl zuvor. Beachten Sie jedoch, dass die Aufzeichnung des Haupt-Rendering-Passes zu diesem Zeitpunkt noch nicht begonnen hat und es nicht möglich ist, Befehle innerhalb dieses Passes hinzuzufügen. Das Starten eines Durchlaufs bedeutet, dass die Farb-, Tiefen- und Schablonenpuffer gelöscht werden, so dass es nicht möglich ist, eine Art Underlay-Rendering zu erreichen, indem man sich einfach mit diesem Signal verbindet. Verbinden Sie sich stattdessen mit beforeRenderPassRecording(). Die Verbindung zu diesem Signal ist jedoch wichtig, wenn die Aufzeichnung von Kopierbefehlen erwünscht ist, da diese nicht innerhalb eines Rendering-Durchgangs in die Warteschlange gestellt werden können.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgegeben. Wenn Ihre Slot-Funktion beendet werden muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Hinweis: Beachten Sie bei der Verwendung von OpenGL, dass das Setzen von OpenGL 3.x- oder 4.x-spezifischen Zuständen und das Belassen dieser aktiviert oder auf nicht standardmäßige Werte gesetzt, wenn Sie vom verbundenen Slot zurückkehren, das Rendering des Szenegraphen beeinträchtigen kann. Die QOpenGLContext, die für das Rendering durch den Szenengraphen verwendet wird, wird gebunden, wenn das Signal ausgesendet wird.
Siehe auch rendererInterface(), Scene Graph - RHI unter QML, Scene Graph - OpenGL unter QML, Scene Graph - Metal unter QML, Scene Graph - Vulkan unter QML und Scene Graph - Direct3D 11 unter QML.
[signal]
void QQuickWindow::beforeSynchronizing()
Dieses Signal wird ausgegeben, bevor der Szenegraph mit dem QML-Zustand synchronisiert wird.
Obwohl das Signal vom Szenengraphen-Rendering-Thread ausgegeben wird, ist der GUI-Thread garantiert blockiert, so wie es auch in QQuickItem::updatePaintNode() der Fall ist. Daher ist es sicher, auf die Daten des GUI-Threads in einem Slot oder Lambda zuzugreifen, der mit Qt::DirectConnection verbunden ist.
Dieses Signal kann verwendet werden, um vor dem Aufruf von QQuickItem::updatePaintNode() alle erforderlichen Vorbereitungen zu treffen.
Bei Verwendung von OpenGL wird die QOpenGLContext, die für das Rendering des Szenengraphen verwendet wird, an diesem Punkt gebunden.
Warnung: Dieses Signal wird vom Szenengraphen-Rendering-Thread ausgegeben. Wenn Ihre Slot-Funktion beendet werden muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Warnung: Beachten Sie bei der Verwendung von OpenGL, dass das Setzen von OpenGL 3.x- oder 4.x-spezifischen Zuständen und das Belassen dieser aktiviert oder auf nicht standardmäßige Werte gesetzt, wenn Sie vom verbundenen Slot zurückkehren, das Rendering des Szenegraphen beeinträchtigen kann.
void QQuickWindow::beginExternalCommands()
Beim Mischen von Rohgrafikbefehlen (OpenGL, Vulkan, Metal usw.) mit dem Rendering von Szenengraphen ist es notwendig, diese Funktion aufzurufen, bevor Befehle im Befehlspuffer aufgezeichnet werden, der vom Szenengraphen zum Rendern seines Haupt-Rendering-Durchgangs verwendet wird. Dadurch wird vermieden, dass der Zustand durcheinander gerät.
In der Praxis wird diese Funktion oft von einem Slot aus aufgerufen, der mit den Signalen beforeRenderPassRecording() oder afterRenderPassRecording() verbunden ist.
Die Funktion muss nicht aufgerufen werden, wenn Befehle im eigenen Befehlspuffer der Anwendung aufgezeichnet werden (z. B. in einem VkCommandBuffer oder MTLCommandBuffer + MTLRenderCommandEncoder, der von der Anwendung erstellt und verwaltet und nicht aus dem Szenegraph abgerufen wird). Bei Grafik-APIs, bei denen es kein natives Befehlspufferkonzept gibt (OpenGL, Direct 3D 11), bieten beginExternalCommands() und endExternalCommands() zusammen einen Ersatz für die Qt 5 resetOpenGLState() Funktion.
Der Aufruf dieser Funktion und endExternalCommands() ist innerhalb der render()-Implementierung eines QSGRenderNode nicht notwendig, da der Szenegraph die notwendigen Schritte für Renderknoten implizit durchführt.
Native Grafikobjekte (wie z. B. Grafikgerät, Befehlspuffer oder Encoder) sind über QSGRendererInterface::getResource() zugänglich.
Achtung! Achten Sie darauf, dass QSGRendererInterface::CommandListResource zwischen beginExternalCommands() - endExternalCommands() ein anderes Objekt zurückgeben kann. Dies kann passieren, wenn die zugrundeliegende Implementierung einen dedizierten sekundären Befehlspuffer für die Aufzeichnung externer Grafikbefehle innerhalb eines Render-Passes bereitstellt. Daher sollten Sie nach dem Aufruf dieser Funktion immer CommandListResource abfragen. Versuchen Sie nicht, ein Objekt aus einer früheren Abfrage wiederzuverwenden.
Hinweis: Wenn der Scenegraph OpenGL verwendet, ist zu beachten, dass der OpenGL-Zustand im Kontext beliebige Einstellungen haben kann und diese Funktion kein Zurücksetzen des Zustands auf die Standardwerte vornimmt.
Siehe auch endExternalCommands() und QQuickOpenGLUtils::resetOpenGLState().
[override virtual protected]
void QQuickWindow::closeEvent(QCloseEvent *e)
Reimplements: QWindow::closeEvent(QCloseEvent *ev).
QSGImageNode *QQuickWindow::createImageNode() const
Erzeugt einen einfachen Bildknoten. Wenn der Scenegraph nicht initialisiert ist, ist der Rückgabewert null.
Dies ist eine Backend-übergreifende Alternative zur direkten Erstellung eines QSGSimpleTextureNode.
Siehe auch QSGImageNode.
QSGNinePatchNode *QQuickWindow::createNinePatchNode() const
Erzeugt einen Neun-Patch-Knoten. Wenn der Scenegraph nicht initialisiert ist, ist der Rückgabewert null.
QSGRectangleNode *QQuickWindow::createRectangleNode() const
Erzeugt einen einfachen Rechteckknoten. Wenn der Scenegraph nicht initialisiert ist, ist der Rückgabewert null.
Dies ist eine Backend-übergreifende Alternative zur direkten Erstellung eines QSGSimpleRectNode.
Siehe auch QSGRectangleNode.
[since 6.7]
QSGTextNode *QQuickWindow::createTextNode() const
Erzeugt einen Textknoten. Wenn der Scenegraph nicht initialisiert ist, ist der Rückgabewert null.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch QSGTextNode.
QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image, QQuickWindow::CreateTextureOptions options) const
Erzeugt eine neue QSGTexture aus dem angegebenen image. Wenn das Bild einen Alphakanal hat, wird die entsprechende Textur einen Alphakanal haben.
Der Aufrufer der Funktion ist dafür verantwortlich, die zurückgegebene Textur zu löschen. Das zugrunde liegende native Texturobjekt wird dann zusammen mit QSGTexture zerstört.
Wenn options TextureCanUseAtlas enthält, kann die Engine das Bild in einen Texturatlas einfügen. Texturen in einem Atlas müssen sich auf QSGTexture::normalizedTextureSubRect() für ihre Geometrie verlassen und unterstützen QSGTexture::Repeat nicht. Andere Werte von CreateTextureOption werden ignoriert.
Wenn options TextureIsOpaque enthält, erstellt die Engine eine RGB-Textur, die für QSGTexture::hasAlphaChannel() false zurückgibt. Undurchsichtige Texturen sind in den meisten Fällen schneller zu rendern. Wenn dieses Flag nicht gesetzt ist, wird die Textur einen Alphakanal haben, der auf dem Bildformat basiert.
Wenn options TextureHasMipmaps enthält, wird die Engine eine Textur erstellen, die Mipmap-Filterung verwenden kann. Mipmapped-Texturen können nicht in einem Atlas sein.
Die Einstellung TextureHasAlphaChannel in options hat für diese Funktion keine Bedeutung, da standardmäßig ein Alphakanal und eine Überblendung angenommen werden. Um dies zu vermeiden, setzen Sie TextureIsOpaque.
Wenn der Szenengraf OpenGL verwendet, wird die zurückgegebene Textur GL_TEXTURE_2D
als Texturziel und GL_RGBA
als internes Format verwenden. Bei anderen Grafik-APIs ist das Texturformat normalerweise RGBA8
. Reimplementieren Sie QSGTexture, um Texturen mit anderen Parametern zu erstellen.
Warnung: Diese Funktion gibt 0 zurück, wenn der Szenegraph noch nicht initialisiert wurde.
Warnung: Die zurückgegebene Textur wird nicht vom Szenengraphen verwaltet und muss vom Aufrufer im Rendering-Thread explizit gelöscht werden. Dies wird erreicht, indem die Textur von einem QSGNode Destruktor gelöscht wird oder indem deleteLater() verwendet wird, falls die Textur bereits eine Affinität zum Rendering Thread hat.
Diese Funktion kann sowohl vom Haupt- als auch vom Rendering-Thread aus aufgerufen werden.
Siehe auch sceneGraphInitialized() und QSGTexture.
QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image) const
Dies ist eine überladene Funktion.
[since 6.6]
QSGTexture *QQuickWindow::createTextureFromRhiTexture(QRhiTexture *texture, QQuickWindow::CreateTextureOptions options = {}) const
Erzeugt eine neue QSGTexture aus der mitgelieferten texture.
Verwenden Sie options, um die Texturattribute anzupassen. Nur das TextureHasAlphaChannel Flag wird von dieser Funktion beachtet. Wenn das Flag gesetzt ist, wird die resultierende QSGTexture immer vom Szenengraphen-Renderer so behandelt, als ob sie überblendet werden müsste. Für Texturen, die vollständig undurchsichtig sind, kann das Nichtsetzen des Flags die Kosten für die Durchführung von Alpha-Blending während des Renderings sparen. Das Flag steht in keinem direkten Zusammenhang mit dem format der QRhiTexture, d.h. es ist völlig normal, das Flag nicht zu setzen, wenn man ein Texturformat wie das häufig verwendete QRhiTexture::RGBA8 hat.
Mipmapping wird nicht von options kontrolliert, da texture bereits erstellt wurde und das Vorhandensein oder Fehlen von Mipmaps bereits eingebaut ist.
Die zurückgegebene QSGTexture ist Eigentümerin der QRhiTexture, was bedeutet, dass texture zusammen mit der zurückgegebenen QSGTexture zerstört wird.
Wenn texture die zugrundeliegenden nativen Grafikressourcen besitzt (OpenGL-Texturobjekt, Vulkan-Bild usw.), hängt dies davon ab, wie QRhiTexture erstellt wurde (QRhiTexture::create() oder QRhiTexture::createFrom()), und dies wird von dieser Funktion nicht kontrolliert oder geändert.
Hinweis: Dies funktioniert nur, wenn der Szenegraph bereits initialisiert wurde und die standardmäßige, QRhi-basierte Anpassung verwendet wird. Der Rückgabewert ist ansonsten nullptr
.
Hinweis: Diese Funktion kann nur im Render-Thread des Szenengraphen aufgerufen werden.
Diese Funktion wurde in Qt 6.6 eingeführt.
Siehe auch createTextureFromImage(), sceneGraphInitialized(), und QSGTexture.
qreal QQuickWindow::effectiveDevicePixelRatio() const
Gibt das Gerätepixelverhältnis für dieses Fenster zurück.
Dies unterscheidet sich von QWindow::devicePixelRatio() insofern, als dass es das umgeleitete Rendering über QQuickRenderControl und QQuickRenderTarget unterstützt. Bei der Verwendung von QQuickRenderControl wird QQuickWindow oft nicht vollständig erstellt, d.h. es wird nie angezeigt und es gibt kein zugrunde liegendes natives Fenster, das im Windowing-System erstellt wurde. Infolgedessen kann die Abfrage von Eigenschaften wie dem Pixelverhältnis des Geräts keine korrekten Ergebnisse liefern. Diese Funktion berücksichtigt sowohl QQuickRenderControl::renderWindowFor() als auch QQuickRenderTarget::devicePixelRatio(). Wenn keine Umleitung in Kraft ist, ist das Ergebnis das gleiche wie QWindow::devicePixelRatio().
Siehe auch QQuickRenderControl, QQuickRenderTarget, setRenderTarget(), und QWindow::devicePixelRatio().
void QQuickWindow::endExternalCommands()
Beim Mischen von Rohgrafikbefehlen (OpenGL, Vulkan, Metal usw.) mit dem Rendering von Szenengraphen ist es notwendig, diese Funktion aufzurufen, nachdem die Befehle im Befehlspuffer aufgezeichnet wurden, der vom Szenengraphen zum Rendern seines Haupt-Rendering-Durchgangs verwendet wird. Dadurch wird vermieden, dass der Zustand durcheinander gerät.
In der Praxis wird diese Funktion oft von einem Slot aus aufgerufen, der mit den Signalen beforeRenderPassRecording() oder afterRenderPassRecording() verbunden ist.
Die Funktion muss nicht aufgerufen werden, wenn Befehle im eigenen Befehlspuffer der Anwendung aufgezeichnet werden (z. B. in einem VkCommandBuffer oder MTLCommandBuffer + MTLRenderCommandEncoder, der von der Anwendung erstellt und verwaltet und nicht aus dem Szenegraph abgerufen wird). Bei Grafik-APIs, bei denen es kein natives Befehlspufferkonzept gibt (OpenGL, Direct 3D 11), bieten beginExternalCommands() und endExternalCommands() zusammen einen Ersatz für die Qt 5 resetOpenGLState() Funktion.
Der Aufruf dieser Funktion und beginExternalCommands() ist innerhalb der render()-Implementierung eines QSGRenderNode nicht notwendig, da der Szenegraph die notwendigen Schritte für Renderknoten implizit durchführt.
Siehe auch beginExternalCommands() und QQuickOpenGLUtils::resetOpenGLState().
[override virtual protected]
bool QQuickWindow::event(QEvent *event)
Reimplements: QWindow::event(QEvent *ev).
[override virtual protected]
void QQuickWindow::exposeEvent(QExposeEvent *)
Reimplements: QWindow::exposeEvent(QExposeEvent *ev).
[override virtual protected]
void QQuickWindow::focusInEvent(QFocusEvent *ev)
Reimplements: QWindow::focusInEvent(QFocusEvent *ev).
[override virtual protected]
void QQuickWindow::focusOutEvent(QFocusEvent *ev)
Reimplements: QWindow::focusOutEvent(QFocusEvent *ev).
[signal]
void QQuickWindow::frameSwapped()
Dieses Signal wird ausgegeben, wenn ein Bild in die Warteschlange für die Präsentation gestellt wurde. Bei aktivierter vertikaler Synchronisation wird das Signal höchstens einmal pro vsync-Intervall in einer kontinuierlich animierten Szene ausgegeben.
Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgegeben.
QImage QQuickWindow::grabWindow()
Greift den Inhalt des Fensters und gibt ihn als Bild zurück.
Es ist möglich, die Funktion grabWindow() aufzurufen, wenn das Fenster nicht sichtbar ist. Dies setzt voraus, dass das Fenster created ist und eine gültige Größe hat und dass keine anderen QQuickWindow Instanzen im selben Prozess gerendert werden.
Hinweis: Wenn dieses Fenster in Kombination mit QQuickRenderControl verwendet wird, ist das Ergebnis dieser Funktion ein leeres Bild, es sei denn, das software
Backend ist in Gebrauch. Dies liegt daran, dass bei der Umleitung der Ausgabe auf eine von der Anwendung verwaltete Grafikressource (z. B. eine Textur) durch die Verwendung von QQuickRenderControl und setRenderTarget() die Anwendung besser für die Verwaltung und Ausführung eines eventuellen Rücklesevorgangs geeignet ist, da sie von Anfang an die volle Kontrolle über die Ressource hat.
Warnung: Der Aufruf dieser Funktion kann zu Leistungsproblemen führen.
Warnung: Diese Funktion kann nur vom GUI-Thread aus aufgerufen werden.
[static, since 6.0]
QSGRendererInterface::GraphicsApi QQuickWindow::graphicsApi()
Gibt die Grafik-API zurück, die vom Szenengraphen verwendet werden würde, wenn er zu diesem Zeitpunkt initialisiert wäre.
Die Standardmethode zur Abfrage der vom Szenengraphen verwendeten API besteht darin, QSGRendererInterface::graphicsApi() zu verwenden, sobald der Szenengraphen initialisiert wurde, z. B. wenn oder nachdem das Signal sceneGraphInitialized() ausgegeben wurde. In diesem Fall erhält man das wahre, echte Ergebnis, denn dann ist bekannt, dass alles korrekt mit dieser Grafik-API initialisiert wurde.
Dies ist nicht immer praktisch. Wenn die Anwendung externe Frameworks einrichten oder mit setGraphicsDevice() in einer Weise arbeiten muss, die von der im Szenegraphen eingebauten API-Auswahllogik abhängt, ist es nicht immer praktikabel, solche Operationen aufzuschieben, bis QQuickWindow sichtbar gemacht oder QQuickRenderControl::initialize() aufgerufen wurde.
Daher wird diese statische Funktion als Gegenstück zu setGraphicsApi() bereitgestellt: Sie kann jederzeit aufgerufen werden, und das Ergebnis spiegelt wider, welche API der Szenengraph wählen würde, wenn er zum Zeitpunkt des Aufrufs initialisiert wäre.
Hinweis: Diese statische Funktion ist nur für den Aufruf im Haupt-Thread (GUI) vorgesehen. Um die API beim Rendern abzufragen, verwenden Sie QSGRendererInterface, da dieses Objekt auf dem Render-Thread lebt.
Hinweis: Diese Funktion berücksichtigt keine Szenegraph-Backends.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch setGraphicsApi().
[since 6.0]
QQuickGraphicsConfiguration QQuickWindow::graphicsConfiguration() const
Gibt die QQuickGraphicsConfiguration zurück, die an setGraphicsConfiguration() übergeben wurde, oder andernfalls eine Standardkonstruktion.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch setGraphicsConfiguration().
[since 6.0]
QQuickGraphicsDevice QQuickWindow::graphicsDevice() const
Gibt die QQuickGraphicsDevice zurück, die an setGraphicsDevice() übergeben wurde, oder andernfalls eine Standardkonstruktion
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch setGraphicsDevice().
const QQuickWindow::GraphicsStateInfo &QQuickWindow::graphicsStateInfo()
Gibt einen Verweis auf eine GraphicsStateInfo -Struktur zurück, die einen Teil des internen Zustands von RHI beschreibt, insbesondere den Double- oder Tripple-Buffering-Status des Backends (z. B. die Vulkan- oder Metal-Integrationen). Dies ist relevant, wenn die zugrundeliegenden Grafik-APIs Vulkan oder Metal sind und der externe Rendering-Code eine doppelte oder dreifache Pufferung seiner eigenen, sich häufig ändernden Ressourcen, wie z. B. einheitliche Puffer, durchführen möchte, um ein Abwürgen der Pipeline zu vermeiden.
[static]
bool QQuickWindow::hasDefaultAlphaBuffer()
Gibt zurück, ob Alpha-Transparenz für neu erstellte Fenster verwendet werden soll.
Siehe auch setDefaultAlphaBuffer().
[override virtual protected]
void QQuickWindow::hideEvent(QHideEvent *)
Reimplements: QWindow::hideEvent(QHideEvent *ev).
QQmlIncubationController *QQuickWindow::incubationController() const
Gibt einen Inkubationscontroller zurück, der die Inkubation zwischen den Frames für dieses Fenster splittet. QQuickView installiert diesen Controller automatisch für Sie, andernfalls müssen Sie ihn selbst mit QQmlEngine::setIncubationController() installieren.
Der Controller ist Eigentum des Fensters und wird zerstört, wenn das Fenster gelöscht wird.
bool QQuickWindow::isPersistentGraphics() const
Gibt zurück, ob wichtige Grafikressourcen während der Lebensdauer von QQuickWindow freigegeben werden können.
Hinweis: Dies ist ein Hinweis und es wird nicht garantiert, dass er beachtet wird.
Siehe auch setPersistentGraphics().
bool QQuickWindow::isPersistentSceneGraph() const
Gibt zurück, ob die Knoten und Ressourcen des Szenegraphen während der Lebensdauer dieses QQuickWindow freigegeben werden können.
Hinweis: Dies ist ein Hinweis. Wann und wie dies geschieht, ist implementierungsspezifisch.
bool QQuickWindow::isSceneGraphInitialized() const
Gibt true zurück, wenn der Szenegraph initialisiert wurde; andernfalls wird false zurückgegeben.
[override virtual protected]
void QQuickWindow::keyPressEvent(QKeyEvent *e)
Reimplements: QWindow::keyPressEvent(QKeyEvent *ev).
[override virtual protected]
void QQuickWindow::keyReleaseEvent(QKeyEvent *e)
Reimplements: QWindow::keyReleaseEvent(QKeyEvent *ev).
[override virtual protected]
void QQuickWindow::mouseDoubleClickEvent(QMouseEvent *event)
Reimplements: QWindow::mouseDoubleClickEvent(QMouseEvent *ev).
[override virtual protected]
void QQuickWindow::mouseMoveEvent(QMouseEvent *event)
Reimplements: QWindow::mouseMoveEvent(QMouseEvent *ev).
[override virtual protected]
void QQuickWindow::mousePressEvent(QMouseEvent *event)
Reimplements: QWindow::mousePressEvent(QMouseEvent *ev).
[override virtual protected]
void QQuickWindow::mouseReleaseEvent(QMouseEvent *event)
Reimplements: QWindow::mouseReleaseEvent(QMouseEvent *ev).
[slot]
void QQuickWindow::releaseResources()
Diese Funktion versucht, redundante Ressourcen freizugeben, die derzeit von der QML-Szene gehalten werden.
Der Aufruf dieser Funktion fordert den Szenegraphen auf, zwischengespeicherte Grafikressourcen freizugeben, wie z.B. Grafikpipeline-Objekte, Shader-Programme oder Bilddaten.
Abhängig von der verwendeten Rendering-Schleife kann diese Funktion auch dazu führen, dass der Szenegraph und alle fensterbezogenen Rendering-Ressourcen freigegeben werden. In diesem Fall wird das Signal sceneGraphInvalidated() ausgegeben, das es dem Benutzer ermöglicht, seine eigenen Grafikressourcen aufzuräumen. Die Funktionen setPersistentGraphics() und setPersistentSceneGraph() können verwendet werden, um dies zu verhindern, wenn es in der Anwendung nicht möglich ist, die Aufräumarbeiten selbst durchzuführen, was allerdings mit einem höheren Speicherverbrauch verbunden ist.
Hinweis: Die Freigabe von zwischengespeicherten Grafikressourcen wie Grafikpipelines oder Shader-Programmen ist nicht von den Persistenzhinweisen abhängig. Die Freigabe dieser Ressourcen erfolgt unabhängig von den Werten der persistenten Grafik- und Scenegraph-Hinweise.
Hinweis: Diese Funktion steht in keinem Zusammenhang mit der virtuellen Funktion QQuickItem::releaseResources().
Siehe auch sceneGraphInvalidated(), setPersistentGraphics(), und setPersistentSceneGraph().
[since 6.0]
QQuickRenderTarget QQuickWindow::renderTarget() const
Gibt die QQuickRenderTarget zurück, die an setRenderTarget() übergeben wurde, oder andernfalls eine Standardkonstruktion
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch setRenderTarget().
QSGRendererInterface *QQuickWindow::rendererInterface() const
Gibt die aktuelle Renderer-Schnittstelle zurück. Der Wert ist immer gültig und niemals null.
Hinweis: Diese Funktion kann jederzeit nach der Konstruktion von QQuickWindow aufgerufen werden, auch wenn isSceneGraphInitialized() noch falsch ist. Einige Funktionen der Renderer-Schnittstelle, insbesondere QSGRendererInterface::getResource(), sind jedoch erst funktionsfähig, wenn der Szenegraph aufgebaut ist und läuft. Backend-Abfragen, wie QSGRendererInterface::graphicsApi() oder QSGRendererInterface::shaderType(), sind dagegen immer funktionsfähig.
Hinweis: Der Besitz des zurückgegebenen Zeigers bleibt bei Qt. Die zurückgegebene Instanz kann zwischen verschiedenen QQuickWindow Instanzen geteilt werden oder auch nicht, abhängig vom verwendeten Scenegraph Backend. Daher wird von Anwendungen erwartet, dass sie das Schnittstellenobjekt für jede QQuickWindow abfragen, anstatt den bereits abgefragten Zeiger wiederzuverwenden.
Siehe auch QSGRenderNode und QSGRendererInterface.
[override virtual protected]
void QQuickWindow::resizeEvent(QResizeEvent *ev)
Reimplements: QWindow::resizeEvent(QResizeEvent *ev).
[since 6.6]
QRhi *QQuickWindow::rhi() const
Gibt das QRhi Objekt zurück, das von diesem Fenster zum Rendern verwendet wird.
Nur verfügbar, wenn das Fenster die 3D-API von Qt und die Abstraktionen der Schattierungssprache verwendet, d.h. das Ergebnis ist immer null, wenn die Anpassung software
verwendet wird.
Das Ergebnis ist nur gültig, wenn das Rendering initialisiert wurde, was durch das Aussenden des sceneGraphInitialized()-Signals angezeigt wird. Vor diesem Zeitpunkt ist der zurückgegebene Wert Null. Bei einem regulären, auf dem Bildschirm angezeigten QQuickWindow Szenegraph erfolgt die Initialisierung normalerweise, wenn das native Fenster zum ersten Mal angezeigt wird. Bei der Verwendung von QQuickRenderControl erfolgt die Initialisierung durch den expliziten Aufruf initialize().
In der Praxis ist diese Funktion eine Abkürzung zur Abfrage der QRhi über die QSGRendererInterface.
Diese Funktion wurde in Qt 6.6 eingeführt.
[signal]
void QQuickWindow::sceneGraphAboutToStop()
Dieses Signal wird auf dem Render-Thread ausgegeben, wenn der Szenengraf im Begriff ist, das Rendering zu beenden. Dies geschieht normalerweise, weil das Fenster ausgeblendet wurde.
Anwendungen können dieses Signal verwenden, um Ressourcen freizugeben, sollten aber darauf vorbereitet sein, sie schnell wieder zu instanziieren. Der Szenegraph und der Grafikkontext werden zu diesem Zeitpunkt nicht freigegeben.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgesendet. Wenn Ihre Slot-Funktion beendet werden muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Warnung: Vergewissern Sie sich, dass ein Signalhandler für sceneGraphAboutToStop() den Grafikkontext in demselben Zustand belässt, in dem er sich befand, als der Signalhandler eingegeben wurde. Andernfalls kann es passieren, dass die Szene nicht richtig gerendert wird.
Siehe auch sceneGraphInvalidated().
[static]
QString QQuickWindow::sceneGraphBackend()
Liefert das angeforderte Qt Quick scenegraph backend.
Hinweis: Der Rückgabewert dieser Funktion kann durch nachfolgende Aufrufe von setSceneGraphBackend() noch überholt sein, bis die erste QQuickWindow in der Anwendung erstellt wurde.
Hinweis: Der Wert spiegelt die Anforderung in der Umgebungsvariablen QT_QUICK_BACKEND
erst wider, nachdem ein QQuickWindow erstellt wurde.
Siehe auch setSceneGraphBackend().
[signal]
void QQuickWindow::sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)
Dieses Signal wird ausgegeben, wenn während der Initialisierung des Szenengraphen ein error aufgetreten ist.
Anwendungen sollten eine Verbindung zu diesem Signal herstellen, wenn sie Fehler, wie z. B. Fehler bei der Erstellung von Grafikkontexten, auf eigene Weise behandeln wollen. Wenn kein Slot mit dem Signal verbunden ist, ist das Verhalten anders: Quick druckt die message oder zeigt eine Messagebox an und beendet die Anwendung.
Dieses Signal wird vom GUI-Thread ausgesendet.
[signal]
void QQuickWindow::sceneGraphInitialized()
Dieses Signal wird ausgegeben, wenn der Szenegraph initialisiert wurde.
Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgegeben.
[signal]
void QQuickWindow::sceneGraphInvalidated()
Dieses Signal wird ausgegeben, wenn der Szenengraf ungültig geworden ist.
Dieses Signal bedeutet, dass der verwendete Grafik-Rendering-Kontext für ungültig erklärt wurde und alle an diesen Kontext gebundenen Benutzerressourcen freigegeben werden sollten.
Wenn mit OpenGL gerendert wird, wird die QOpenGLContext dieses Fensters gebunden, wenn diese Funktion aufgerufen wird. Die einzige Ausnahme ist, wenn das native OpenGL außerhalb der Kontrolle von Qt zerstört wurde, zum Beispiel durch EGL_CONTEXT_LOST.
Dieses Signal wird vom Rendering-Thread des Szenegraphs ausgesendet.
void QQuickWindow::scheduleRenderJob(QRunnable *job, QQuickWindow::RenderStage stage)
Plant die Ausführung von job, wenn das Rendering dieses Fensters die angegebene stage erreicht.
Dies ist eine Erleichterung gegenüber den entsprechenden Signalen in QQuickWindow für "einmalige" Aufgaben.
Das Fenster übernimmt das Eigentum an job und löscht es, wenn der Auftrag abgeschlossen ist.
Wenn das Rendering beendet wird, bevor job die Möglichkeit hat, zu laufen, wird der Auftrag ausgeführt und dann im Rahmen der Bereinigung des Szenegraphen gelöscht. Wenn das Fenster nie angezeigt wird und kein Rendering stattfindet, bevor QQuickWindow zerstört wird, werden alle anhängigen Jobs zerstört, ohne dass ihre run()-Methode aufgerufen wird.
Wenn das Rendering auf einem anderen Thread stattfindet, dann wird der Job auf dem Rendering-Thread ausgeführt.
Wenn stage NoStage ist, wird job zum frühestmöglichen Zeitpunkt ausgeführt, wenn der Rendering-Thread nicht mit dem Rendern eines Frames beschäftigt ist. Wenn das Fenster zum Zeitpunkt des Postings oder der Bearbeitung des Auftrags nicht exponiert und nicht renderbar ist, wird der Auftrag gelöscht, ohne dass die run()-Methode ausgeführt wird. Wenn ein Renderer ohne Threads verwendet wird, wird die run()-Methode des Jobs synchron ausgeführt. Beim Rendering mit OpenGL wird der OpenGL-Kontext in den Kontext des Renderers geändert, bevor ein Auftrag ausgeführt wird, einschließlich NoStage.
Hinweis: Diese Funktion löst das Rendering nicht aus; die Jobs, die auf eine andere Stufe als NoStage abzielen, werden gespeichert, bis das Rendering anderweitig ausgelöst wird. Um die Ausführung des Auftrags früher zu erzwingen, rufen Sie QQuickWindow::update() auf;
Siehe auch beforeRendering(), afterRendering(), beforeSynchronizing(), afterSynchronizing(), frameSwapped(), und sceneGraphInvalidated().
[static]
void QQuickWindow::setDefaultAlphaBuffer(bool useAlpha)
useAlpha gibt an, ob Alpha-Transparenz für neu erstellte Fenster verwendet werden soll.
In jeder Anwendung, die durchsichtige Fenster erstellen möchte, muss dies auf true gesetzt werden, bevor das erste QQuickWindow erstellt wird. Der Standardwert ist false.
Siehe auch hasDefaultAlphaBuffer().
[static, since 6.0]
void QQuickWindow::setGraphicsApi(QSGRendererInterface::GraphicsApi api)
Fordert die angegebene Grafik api an.
Wenn die eingebaute, standardmäßige Grafikanpassung verwendet wird, gibt api an, welche Grafik-API (OpenGL, Vulkan, Metal oder Direct3D) der Szenegraph zum Rendern verwenden soll. Darüber hinaus ist das software
Backend ebenfalls eingebaut und kann durch Setzen von api auf QSGRendererInterface::Software angefordert werden.
Im Gegensatz zu setSceneGraphBackend(), das nur verwendet werden kann, um ein bestimmtes Backend anzufordern (das entweder eingebaut oder als dynamisch geladene Plugins installiert ist), arbeitet diese Funktion mit dem übergeordneten Konzept der Grafik-APIs. Sie deckt die Backends ab, die mit Qt Quick ausgeliefert werden und daher entsprechende Werte in der Aufzählung QSGRendererInterface::GraphicsApi haben.
Wenn diese Funktion nicht aufgerufen wird und auch die entsprechende Umgebungsvariable QSG_RHI_BACKEND
nicht gesetzt ist, wählt der Szenegraph die zu verwendende Grafik-API auf der Grundlage der Plattform.
Diese Funktion wird in Anwendungen wichtig, die nur für das Rendering mit einer bestimmten API vorbereitet sind. Wenn die Anwendung beispielsweise ein natives OpenGL- oder Vulkan-Rendering durchführt, wird sie sicherstellen wollen, dass Qt Quick auch mit OpenGL oder Vulkan gerendert wird. Von solchen Anwendungen wird erwartet, dass sie diese Funktion früh in ihrer main()-Funktion aufrufen.
Hinweis: Der Aufruf der Funktion muss erfolgen, bevor die erste QQuickWindow in der Anwendung erstellt wird. Die Grafik-API kann danach nicht mehr geändert werden.
Hinweis: Bei Verwendung in Kombination mit QQuickRenderControl wird diese Regel gelockert: Es ist möglich, die Grafik-API zu ändern, aber nur, wenn alle vorhandenen QQuickRenderControl und QQuickWindow Instanzen zerstört wurden.
Um abzufragen, welche Grafik-API der Szenengraf zum Rendern verwendet, rufen Sie QSGRendererInterface::graphicsApi() nach dem Szenengraphen has initialized auf. Dies geschieht normalerweise entweder, wenn das Fenster zum ersten Mal sichtbar wird, oder wenn QQuickRenderControl::initialize() aufgerufen wird.
Um zurück zum Standardverhalten zu wechseln, bei dem der Szenengraf eine Grafik-API basierend auf der Plattform und anderen Bedingungen auswählt, setzen Sie api auf QSGRendererInterface::Unknown.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch graphicsApi().
[since 6.0]
void QQuickWindow::setGraphicsConfiguration(const QQuickGraphicsConfiguration &config)
Legt die Grafikkonfiguration für dieses Fenster fest. config enthält verschiedene Einstellungen, die vom Szenengraphen bei der Initialisierung der zugrunde liegenden Grafikgeräte und Kontexte berücksichtigt werden können.
Eine solche zusätzliche Konfiguration, die beispielsweise angibt, welche Geräteerweiterungen für Vulkan aktiviert werden sollen, wird relevant und unerlässlich, wenn nativer Grafik-Rendering-Code integriert wird, der auf bestimmte Erweiterungen angewiesen ist. Dasselbe gilt für die Integration mit externen 3D- oder VR-Engines, wie z. B. OpenXR.
Hinweis: Die Konfiguration wird ignoriert, wenn vorhandene Grafikgeräte über setGraphicsDevice() übernommen werden, da der Szenegraph dann keine Kontrolle über die tatsächliche Konstruktion dieser Objekte hat.
QQuickGraphicsConfiguration Instanzen werden implizit gemeinsam genutzt, sind kopierbar und können als Wert übergeben werden.
Warnung: Das Setzen von QQuickGraphicsConfiguration auf QQuickWindow muss früh genug erfolgen, bevor der Szenegraph zum ersten Mal für dieses Fenster initialisiert wird. Bei On-Screen-Fenstern bedeutet dies, dass der Aufruf vor dem Aufruf von show() auf QQuickWindow oder QQuickView erfolgen muss. Bei QQuickRenderControl muss die Konfiguration vor dem Aufruf von initialize() abgeschlossen sein.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch graphicsConfiguration().
[since 6.0]
void QQuickWindow::setGraphicsDevice(const QQuickGraphicsDevice &device)
Legt die Grafikgeräteobjekte für dieses Fenster fest. Der Scenegraph verwendet vorhandene Geräte, physische Geräte und andere Objekte, die von device angegeben werden, anstatt neue zu erstellen.
Diese Funktion wird sehr oft in Kombination mit QQuickRenderControl und setRenderTarget() verwendet, um das Rendering von Qt Quick in eine Textur umzuleiten.
Eine standardmäßig erstellte QQuickGraphicsDevice ändert das Standardverhalten in keiner Weise. Sobald ein device, das über eine der QQuickGraphicsDevice -Fabrikfunktionen wie QQuickGraphicsDevice::fromDeviceObjects() erstellt wurde, übergeben wird und der Szenegraph eine passende Grafik-API verwendet (im Beispiel von fromDeviceObjects() wäre das Vulkan), verwendet der Szenegraph die vorhandenen Geräteobjekte (wie VkPhysicalDevice
, VkDevice
und den Index der Grafikwarteschlangenfamilie im Fall von Vulkan), die durch QQuickGraphicsDevice gekapselt sind. Dies ermöglicht die Verwendung desselben Geräts und damit die gemeinsame Nutzung von Ressourcen wie Puffern und Texturen zwischen Qt Quick und nativen Rendering-Engines.
Warnung: Diese Funktion kann nur vor der Initialisierung des Scenegraphs aufgerufen werden und hat keinen Effekt, wenn sie danach aufgerufen wird. In der Praxis bedeutet dies typischerweise, dass sie direkt vor QQuickRenderControl::initialize() aufgerufen wird.
Als Beispiel, dieses Mal mit Direct3D, ist die typische Verwendung wie folgt zu erwarten:
// native graphics resources set up by a custom D3D rendering engine ID3D11Device *device; ID3D11DeviceContext *context; ID3D11Texture2D *texture; ... // now to redirect Qt Quick content into 'texture' we could do the following: QQuickRenderControl *renderControl = new QQuickRenderControl; QQuickWindow *window = new QQuickWindow(renderControl); // this window will never be shown on-screen ... window->setGraphicsDevice(QQuickGraphicsDevice::fromDeviceAndContext(device, context)); renderControl->initialize(); window->setRenderTarget(QQuickRenderTarget::fromD3D11Texture(texture, textureSize); ...
Der wichtigste Aspekt bei der Verwendung dieser Funktion ist es, sicherzustellen, dass Ressourcen oder Handles auf Ressourcen, wie texture
im obigen Beispiel, sowohl für die externe Rendering-Engine als auch für den Scenegraph-Renderer sichtbar und nutzbar sind. Dies erfordert die Verwendung desselben Grafikgeräts (oder bei OpenGL, OpenGL-Kontext).
QQuickGraphicsDevice Instanzen sind implizit gemeinsam genutzt, kopierbar und können als Wert übergeben werden. Sie besitzen nicht die zugehörigen nativen Objekte (wie z. B. das ID3D11Device im Beispiel).
Hinweis: Die Verwendung von QQuickRenderControl bedeutet nicht immer, dass diese Funktion aufgerufen werden muss. Wenn die Übernahme eines existierenden Geräts oder Kontexts nicht benötigt wird, sollte diese Funktion nicht aufgerufen werden, und der Szenegraph wird dann seine eigenen Geräte und Kontexte normal initialisieren, genau wie bei einem On-Screen QQuickWindow.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch graphicsDevice(), QQuickRenderControl, setRenderTarget(), und setGraphicsApi().
void QQuickWindow::setPersistentGraphics(bool persistent)
Legt fest, ob die Grafikressourcen (Grafikgerät oder -kontext, Swapchain, Puffer, Texturen) erhalten bleiben sollen und nicht freigegeben werden können, bis das letzte Fenster gelöscht wird, auf persistent. Der Standardwert ist true.
Beim Aufruf von releaseResources() oder wenn das Fenster ausgeblendet wird (genauer gesagt, nicht gerendert werden kann), haben einige Renderschleifen die Möglichkeit, alle, nicht nur die zwischengespeicherten, Grafikressourcen freizugeben. Dies kann vorübergehend Speicher freigeben, bedeutet aber auch, dass die Rendering-Engine eine vollständige, möglicherweise kostspielige Neuinitialisierung der Ressourcen vornehmen muss, wenn das Fenster wieder gerendert werden muss.
Hinweis: Die Regeln dafür, wann ein Fenster nicht gerendert werden kann, sind plattform- und fenstermanagerspezifisch.
Hinweis: Alle Grafikressourcen werden freigegeben, wenn das letzte QQuickWindow gelöscht wird, unabhängig von dieser Einstellung.
Hinweis: Dies ist ein Hinweis und es wird nicht garantiert, dass er beachtet wird.
Hinweis: Dieser Hinweis gilt nicht für zwischengespeicherte Ressourcen, die relativ billig zu löschen und später wiederherzustellen sind. Daher wird der Aufruf von releaseResources() in der Regel dazu führen, dass diese unabhängig vom Wert dieses Hinweises freigegeben werden.
Siehe auch isPersistentGraphics(), setPersistentSceneGraph(), sceneGraphInitialized(), sceneGraphInvalidated(), und releaseResources().
void QQuickWindow::setPersistentSceneGraph(bool persistent)
Legt fest, ob die Knoten und Ressourcen des Szenegraphen persistent sind. Dauerhaft bedeutet, dass die Knoten und Ressourcen nicht freigegeben werden können. Der Standardwert ist true
.
Beim Aufruf von releaseResources(), wenn das Fenster ausgeblendet wird (genauer gesagt, nicht gerendert werden kann), haben einige Renderschleifen die Möglichkeit, die Knoten des Szenengraphen und die zugehörigen Grafikressourcen freizugeben. Dies gibt vorübergehend Speicher frei, bedeutet aber auch, dass der Szenegraph neu aufgebaut werden muss, wenn das Fenster das nächste Mal gerendert wird.
Hinweis: Die Regeln dafür, wann ein Fenster nicht gerendert werden kann, sind plattform- und fenstermanagerspezifisch.
Hinweis: Die Knoten und Ressourcen des Szenegraphen werden immer freigegeben, wenn das letzte QQuickWindow gelöscht wird, unabhängig von dieser Einstellung.
Hinweis: Dies ist ein Hinweis, und es ist nicht garantiert, dass er berücksichtigt wird.
Siehe auch isPersistentSceneGraph(), setPersistentGraphics(), sceneGraphInvalidated(), sceneGraphInitialized(), und releaseResources().
[since 6.0]
void QQuickWindow::setRenderTarget(const QQuickRenderTarget &target)
Setzt das Rendering-Ziel für dieses Fenster auf target.
Ein QQuickRenderTarget dient als undurchsichtiges Handle für ein gerendertes natives Objekt, meist eine 2D-Textur, und zugehörige Metadaten, wie die Größe in Pixeln.
Eine standardmäßig erstellte QQuickRenderTarget bedeutet keine Umleitung. Ein gültiges target, das über eine der statischen QQuickRenderTarget -Factory-Funktionen erstellt wurde, ermöglicht dagegen die Umleitung des Renderings der Qt Quick -Szene: Es wird nicht mehr auf die Farbpuffer für die mit dem Fenster verbundene Oberfläche abzielen, sondern auf die Texturen oder andere in target angegebene Grafikobjekte.
Angenommen, der Scenegraph verwendet Vulkan zum Rendern, kann man seine Ausgabe in eine VkImage
umleiten. Für Grafik-APIs wie Vulkan muss auch das Bildlayout angegeben werden. QQuickRenderTarget Instanzen werden implizit gemeinsam genutzt, sind kopierbar und können als Wert übergeben werden. Sie besitzen jedoch nicht die zugehörigen nativen Objekte (wie z. B. das VkImage im Beispiel).
QQuickRenderTarget rt = QQuickRenderTarget::fromVulkanImage(vulkanImage, VK_IMAGE_LAYOUT_PREINITIALIZED, pixelSize); quickWindow->setRenderTarget(rt);
Diese Funktion wird sehr oft in Kombination mit QQuickRenderControl und einem unsichtbaren QQuickWindow verwendet, um Qt Quick Inhalte in eine Textur zu rendern, ohne ein natives Fenster auf dem Bildschirm für dieses QQuickWindow zu erzeugen.
Wenn sich das gewünschte Ziel oder die zugehörigen Daten, wie z. B. die Größe, ändern, rufen Sie diese Funktion mit einem neuen QQuickRenderTarget auf. Die Erstellung von QQuickRenderTarget Instanzen und der Aufruf dieser Funktion ist billig, aber seien Sie sich bewusst, dass das Setzen eines neuen target mit einem anderen nativen Objekt oder anderen Daten zu potenziell teuren Initialisierungsschritten führen kann, wenn der Szenegraph dabei ist, das nächste Bild zu rendern. Ändern Sie daher das Ziel nur, wenn es notwendig ist.
Hinweis: Das Fenster übernimmt kein Eigentum an nativen Objekten, die in target referenziert werden.
Hinweis: Es liegt in der Verantwortung des Aufrufers sicherzustellen, dass die nativen Objekte, auf die in target verwiesen wird, auch für den Scenegraph-Renderer gültig sind. Bei Vulkan, Metal und Direct3D bedeutet dies zum Beispiel, dass die Textur oder das Bild auf demselben Grafikgerät erstellt wird, das intern vom Scenegraph verwendet wird. Wenn es sich also um Texturobjekte handelt, die auf einem bereits existierenden Gerät oder Kontext erstellt wurden, wird diese Funktion oft in Kombination mit setGraphicsDevice() verwendet.
Hinweis: Bei Grafik-APIs muss die Anwendung gegebenenfalls auf die vom Scenegraph durchgeführten Bild-Layout-Übergänge achten. Wenn zum Beispiel ein VkImage durch den Aufruf dieser Funktion mit dem Scenegraph verknüpft ist, wird sein Layout beim Rendern eines Frames auf VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
umgestellt.
Achtung! Diese Funktion kann nur von dem Thread aufgerufen werden, der das Rendering durchführt.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch renderTarget(), QQuickRenderControl, setGraphicsDevice(), und setGraphicsApi().
[static]
void QQuickWindow::setSceneGraphBackend(const QString &backend)
Fordert einen Qt Quick Szenengraphen backend an. Backends können entweder eingebaut sein oder in Form von dynamisch geladenen Plugins installiert werden.
Dies ist eine überladene Funktion.
Hinweis: Der Aufruf der Funktion muss erfolgen, bevor das erste QQuickWindow in der Anwendung erstellt wird. Er kann danach nicht mehr geändert werden.
Weitere Informationen über die Liste der Backends finden Sie unter Umschalten zwischen Anpassungen in Ihrer Anwendung. Wenn backend ungültig ist oder ein Fehler auftritt, wird die Anfrage ignoriert.
Hinweis: Der Aufruf dieser Funktion ist gleichbedeutend mit dem Setzen der Umgebungsvariablen QT_QUICK_BACKEND
oder QMLSCENE_DEVICE
. Diese API ist jedoch in Anwendungen, die andere Prozesse starten, sicherer, da man sich nicht um die Vererbung der Umgebung kümmern muss.
Siehe auch sceneGraphBackend().
[static]
void QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType renderType)
Setzt den Standard-Rendertyp von textähnlichen Elementen in Qt Quick auf renderType.
Hinweis: Die Einstellung des Rendertyps wirkt sich nur auf Elemente aus, die anschließend erstellt werden; der Rendertyp vorhandener Elemente wird nicht geändert.
Siehe auch textRenderType().
[override virtual protected]
void QQuickWindow::showEvent(QShowEvent *)
Reimplements: QWindow::showEvent(QShowEvent *ev).
[since 6.6]
QRhiSwapChain *QQuickWindow::swapChain() const
Gibt die QRhiSwapChain zurück, die von diesem Fenster verwendet wird, falls es eine gibt.
Hinweis: Nur Bildschirmfenster, die von einer der Standard-Rendering-Schleifen (z. B. basic
oder threaded
) unterstützt werden, haben eine Swapchain. Andernfalls ist der zurückgegebene Wert Null. Zum Beispiel ist das Ergebnis immer Null, wenn das Fenster mit QQuickRenderControl verwendet wird.
Diese Funktion wurde in Qt 6.6 eingeführt.
[override virtual protected]
void QQuickWindow::tabletEvent(QTabletEvent *event)
Reimplements: QWindow::tabletEvent(QTabletEvent *ev).
[static]
QQuickWindow::TextRenderType QQuickWindow::textRenderType()
Gibt den Rendertyp von textähnlichen Elementen in Qt Quick zurück. Die Vorgabe ist QQuickWindow::QtTextRendering.
Siehe auch setTextRenderType().
[slot]
void QQuickWindow::update()
Plant das Fenster für das Rendern eines weiteren Frames.
Der Aufruf von QQuickWindow::update() unterscheidet sich von QQuickItem::update() dadurch, dass er immer ein neues Bild auslöst, unabhängig davon, ob sich der zugrunde liegende Szenegraph geändert hat oder nicht.
[override virtual protected]
void QQuickWindow::wheelEvent(QWheelEvent *event)
Reimplements: QWindow::wheelEvent(QWheelEvent *ev).
© 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.