QQuickWindow Class
Die Klasse „QQuickWindow“ stellt das Fenster zur Darstellung einer grafischen QML-Szene bereit. Mehr...
| Header: | #include <QQuickWindow> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| In QML: | Window |
| Erbt von: | QWindow |
| Vererbt an: |
Ö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
|
|
Ö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 |
Neu implementierte ö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 &) |
(since 6.11) void | devicePixelRatioChanged() |
| 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() |
Neu implementierte 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 |
Ausführliche Beschreibung
QQuickWindow bietet die grafische Szenenverwaltung, die für die Interaktion mit und die Darstellung einer Szene aus QQuickItems erforderlich ist.
Ein QQuickWindow verfügt immer über ein einziges, unsichtbares Stammelement. Um Elemente zu diesem Fenster hinzuzufügen, ordnen Sie die Elemente dem Stammelement oder einem vorhandenen Element in der Szene zu.
Informationen zur einfachen Darstellung einer Szene aus einer QML-Datei finden Sie unter QQuickView.
Rendering
QQuickWindow verwendet einen Szenengraphen, um darzustellen, was gerendert werden muss. Dieser Szenengraph ist von der QML-Szene getrennt und läuft je nach Plattformimplementierung möglicherweise in einem anderen Thread. Da der Rendering-Szenengraph unabhängig von der QML-Szene läuft, kann er auch vollständig freigegeben werden, ohne den Zustand der QML-Szene zu beeinflussen.
Das Signal ` sceneGraphInitialized()` wird im Rendering-Thread ausgelöst, bevor die QML-Szene zum ersten Mal auf dem Bildschirm gerendert wird. Wenn der Rendering-Szenenbaum freigegeben wurde, wird das Signal vor dem Rendern des nächsten Frames erneut ausgelöst. Ein sichtbares, auf dem Bildschirm angezeigtes `QQuickWindow` wird intern von einem ` render loop` gesteuert, für das im Szenenbaum mehrere Implementierungen bereitgestellt werden. Einzelheiten zum Rendering-Prozess des Szenenbaums finden Sie unter „Qt Quick -Szenenbaum“.
Standardmäßig erfolgt das Rendern eines QQuickWindow über eine beschleunigte 3D-Grafik-API wie OpenGL oder Vulkan. Eine detaillierte Übersicht über die Szenengrafik-Backends und die unterstützten Grafik-APIs finden Sie unter „Scene Graph Adaptations “.
Warnung: Es ist von entscheidender Bedeutung, dass Grafikoperationen und die Interaktion mit dem Szenengraphen ausschließlich im Rendering-Thread stattfinden, vor allem während der Phase `updatePaintNode()`.
Warnung: Da viele der Signale, die sich auf das Rendern beziehen, vom Rendering-Thread ausgesendet werden, sollten 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, sofern das `QQuickWindow` und der zugrunde liegende Szenengraph mit derselben API gerendert werden. Um auf native Grafikobjekte wie Geräte- oder Kontext-Objekt-Handles zuzugreifen, verwenden Sie ` QSGRendererInterface`. Eine Instanz von ` QSGRendererInterface ` kann von `QQuickWindow` durch Aufruf von ` rendererInterface()` abgefragt werden. Die Enabler für diese Integration sind die Signale ` beforeRendering()`, ` beforeRenderPassRecording()`, ` afterRenderPassRecording()` und verwandte Signale. Diese ermöglichen das Rendern von Underlays oder Overlays. Alternativ ermöglichen „ QNativeInterface::QSGOpenGLTexture “, „ QNativeInterface::QSGVulkanTexture “ und andere ähnliche Klassen das Einbinden eines vorhandenen nativen Textur- oder Bildobjekts in ein „ QSGTexture “, das dann mit dem Szenengraphen verwendet werden kann.
Rendering ohne Beschleunigung
Es steht auch ein eingeschränkter, rein softwarebasierter Rendering-Pfad zur Verfügung. Mit dem Backend „ software “ sind eine Reihe von „ Qt Quick “-Funktionen nicht verfügbar; QML-Elemente, die darauf angewiesen sind, werden überhaupt nicht gerendert. Gleichzeitig ermöglicht dies den Betrieb von QQuickWindow auch auf Systemen, auf denen überhaupt keine 3D-Grafik-API verfügbar ist. Weitere Details finden Sie unter „Qt Quick -Software-Anpassung “.
Umgeleitete Darstellung
Ein QQuickWindow wird nicht zwangsläufig von einem nativen Fenster auf dem Bildschirm unterstützt. Die Darstellung kann umgeleitet werden, um ein benutzerdefiniertes Renderziel anzusteuern, beispielsweise eine bestimmte native Textur. Dies wird in Kombination mit der Klasse „ QQuickRenderControl “ und Funktionen wie „ setRenderTarget()“, „ setGraphicsDevice()“ und „ setGraphicsConfiguration()“ erreicht.
In diesem Fall repräsentiert das `QQuickWindow` die Szene und stellt die Infrastruktur für das Rendern eines Frames bereit. Es wird nicht durch eine Render-Schleife und ein natives Fenster unterstützt. Stattdessen steuert in diesem Fall die Anwendung das Rendern und ersetzt damit effektiv die Render-Schleifen. Dies ermöglicht die Erzeugung von Bildsequenzen, das Rendern in Texturen zur Verwendung in externen 3D-Engines oder das Rendern v Qt Quick r Inhalte innerhalb einer VR-Umgebung.
Ressourcenverwaltung
QML versucht, Bilder und Knoten des Szenengraphen zwischenzuspeichern, um die Leistung zu verbessern, doch in einigen Szenarien mit geringem Speicherplatz kann es erforderlich sein, diese Ressourcen aggressiv freizugeben. Die Funktion ` releaseResources()` kann verwendet werden, um die Bereinigung bestimmter Ressourcen zu erzwingen, insbesondere von Ressourcen, die zwischengespeichert sind und später bei Bedarf neu erstellt werden können.
Darüber hinaus kann der Aufruf von ` releaseResources()` dazu führen, dass der gesamte Szenenbaum und die zugehörigen Grafikressourcen freigegeben werden. In diesem Fall wird das Signal ` sceneGraphInvalidated()` ausgelöst. Dieses Verhalten wird durch die Funktionen ` setPersistentGraphics()` und ` setPersistentSceneGraph()` gesteuert.
Hinweis: Alle Klassen mit dem Präfix „QSG“ sollten ausschließlich auf dem Rendering-Thread des Szenengraphen verwendet werden. Weitere Informationen finden Sie unter „Szenengraph und Rendering “.
Exposition und Sichtbarkeit
Wenn eine `QQuickWindow`-Instanz bewusst mit ` hide()` oder `setVisible(false)` ausgeblendet wird, wird das Rendern beendet, und ihr Szenenbaum sowie ihr Grafikkontext werden möglicherweise ebenfalls freigegeben. Dies hängt von den Einstellungen ab, die mit ` setPersistentGraphics()` und ` setPersistentSceneGraph()` konfiguriert wurden. Das Verhalten in dieser Hinsicht entspricht dem expliziten Aufruf der Funktion ` releaseResources()`. Ein Fenster kann auch auf andere Weise nicht sichtbar, d. h. nicht mehr darstellbar, werden. Dies hängt von der Plattform und dem Fenstersystem ab. Unter Windows beispielsweise wird die Darstellung eines Fensters beendet, wenn es minimiert wird. Unter macOS löst das vollständige Verdecken eines Fensters durch darüberliegende Fenster denselben Effekt aus. Unter Linux/X11 hängt das Verhalten vom Fenstermanager ab.
OpenGL-Kontext- und Oberflächenformate
Zwar ist es möglich, für jedes `QQuickWindow` ein „ QSurfaceFormat “ durch Aufruf der Mitgliedsfunktion ` setFormat()` anzugeben, doch können Fenster auch aus QML mithilfe der Elemente `Window` und ` ApplicationWindow ` erstellt werden. In diesem Fall ist kein C++-Code an der Erstellung der Fensterinstanz beteiligt, dennoch möchten Anwendungen möglicherweise bestimmte Oberflächenformatwerte festlegen, beispielsweise um eine bestimmte OpenGL-Version oder ein bestimmtes Profil anzufordern. Solche Anwendungen können beim Start die statische Funktion ` QSurfaceFormat::setDefaultFormat()` aufrufen. Das angegebene Format wird für alle anschließend erstellten Quick-Fenster verwendet.
Vulkan-Instanz
Bei der Verwendung von Vulkan wird ein `QQuickWindow` automatisch mit einem ` QVulkanInstance ` verknüpft, das intern vom Szenengraphen erstellt und verwaltet wird. Auf diese Weise müssen sich die meisten Anwendungen keine Gedanken darüber machen, ob ein ` VkInstance ` verfügbar ist, da dies alles automatisch geschieht. In fortgeschrittenen Fällen möchte eine Anwendung möglicherweise ein eigenes ` QVulkanInstance` erstellen, um es auf eine bestimmte Weise zu konfigurieren. Auch das ist möglich. Der Aufruf von ` setVulkanInstance()` am `QQuickWindow` unmittelbar nach der Erstellung, noch bevor es sichtbar gemacht wird, führt dazu, dass der von der Anwendung bereitgestellte ` QVulkanInstance ` (und der zugrunde liegende ` VkInstance`) verwendet wird. Bei einer Umleitung über ` QQuickRenderControl` wird kein ` QVulkanInstance ` automatisch bereitgestellt, sondern es wird erwartet, dass die Anwendung ein eigenes bereitstellt und es mit dem `QQuickWindow` verknüpft.
Grafikkontexte und Geräte
Bei der Initialisierung des Szenengraphen – was typischerweise geschieht, wenn das Fenster sichtbar wird, oder im Falle einer umgeleiteten Darstellung, wenn die Initialisierung über ` via QQuickRenderControl` erfolgt – werden die für die Darstellung erforderlichen Kontext- oder Geräteobjekte automatisch erstellt. Dazu gehören OpenGL-Kontexte, Direct3D-Geräte und -Gerätekontexte sowie Vulkan- und Metal-Geräte. Diese können anschließend auch vom Anwendungscode über ` QSGRendererInterface` abgefragt werden. Bei Verwendung der Render-Schleife „ basic “, die das gesamte Rendering auf dem GUI-Thread ausführt, wird für alle sichtbaren `QQuickWindows` derselbe Kontext oder dasselbe Gerät verwendet. Die Render-Schleife „ threaded “ verwendet für jeden Rendering-Thread – und somit für jedes `QQuickWindow` – ein eigenes Kontext- oder Geräteobjekt. Bei einigen Grafik-APIs besteht ein gewisses Maß an Anpassbarkeit über ` setGraphicsConfiguration()`. Dies ermöglicht es beispielsweise, die Liste der Vulkan-Erweiterungen anzugeben, die auf dem „ VkDevice “ aktiviert werden sollen. Alternativ ist es auch möglich, eine Reihe bestehender Kontext- oder Geräteobjekte zur Verwendung durch das QQuickWindow bereitzustellen, anstatt es sein eigenes erstellen zu lassen. Dies wird über „ setGraphicsDevice()“ erreicht.
Siehe auch QQuickView, QQuickRenderControl, QQuickRenderTarget, QQuickGraphicsDevice, QQuickGraphicsConfiguration und QSGRendererInterface.
Dokumentation zu den Mitgliedstypen
enum QQuickWindow::CreateTextureOption
flags QQuickWindow::CreateTextureOptions
Die CreateTextureOption-Enums dienen dazu, die Art und Weise anzupassen, wie eine Textur gewickelt wird.
| Konstante | Wert | Beschreibung |
|---|---|---|
QQuickWindow::TextureHasAlphaChannel | 0x0001 | Die Textur verfügt über einen Alphakanal und sollte mit Überblendung gezeichnet werden. |
QQuickWindow::TextureHasMipmaps | 0x0002 | Die Textur verfügt über Mipmaps und kann mit aktiviertem Mipmapping gezeichnet werden. |
QQuickWindow::TextureOwnsGLTexture | 0x0004 | Ab Qt 6.0 wird dieses Flag in der Praxis nicht mehr verwendet und ignoriert. Die Eigentumsrechte an nativen Grafikressourcen sind nicht auf die umschließende ` QSGTexture` übertragbar, da ` Qt Quick ` möglicherweise nicht über die erforderlichen Details verfügt, wie ein solches Objekt und der zugehörige Speicher freigegeben werden sollen. |
QQuickWindow::TextureCanUseAtlas | 0x0008 | Das Bild kann in einen Texturatlas hochgeladen werden. |
QQuickWindow::TextureIsOpaque | 0x0010 | Die Textur gibt bei ` QSGTexture::hasAlphaChannel()` den Wert „false“ zurück und wird nicht gemischt. Dieses Flag wurde in Qt 5.6 hinzugefügt. |
Der Typ `CreateTextureOptions` ist ein `typedef` für ` QFlags<CreateTextureOption>`. Er speichert eine OR-Kombination von `CreateTextureOption`-Werten.
enum QQuickWindow::RenderStage
| Konstante | Wert | Beschreibung |
|---|---|---|
QQuickWindow::BeforeSynchronizingStage | 0 | Vor der Synchronisierung. |
QQuickWindow::AfterSynchronizingStage | 1 | Nach der Synchronisation. |
QQuickWindow::BeforeRenderingStage | 2 | Vor dem Rendern. |
QQuickWindow::AfterRenderingStage | 3 | Nach dem Rendern. |
QQuickWindow::AfterSwapStage | 4 | Nach dem Austausch des Frames. |
QQuickWindow::NoStage | 5 | So bald wie möglich. Dieser Wert wurde in Qt 5.6 hinzugefügt. |
Siehe auch Szenengraph und Rendering.
enum QQuickWindow::SceneGraphError
Diese Enumeration beschreibt den Fehler in einem Signal vom Typ „ sceneGraphError()“.
| Konstante | Wert | Beschreibung |
|---|---|---|
QQuickWindow::ContextNotAvailable | 1 | Die Erstellung des Grafikkontexts ist fehlgeschlagen. Dies bedeutet in der Regel, dass keine geeignete OpenGL-Implementierung gefunden wurde, beispielsweise 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 in das Fenstersystem und möglicherweise auf eine fehlerhafte Konfiguration von Qt OpenGL hin. |
enum QQuickWindow::TextRenderType
Diese Enumeration beschreibt den Standard-Rendering-Typ für textähnliche Elemente in „ Qt Quick “ (Text, TextInput usw.).
Wählen Sie „NativeTextRendering“, wenn Sie möchten, dass der Text auf der Zielplattform nativ dargestellt wird, und keine erweiterten Funktionen wie die Transformation des Textes benötigen. Die Verwendung solcher Funktionen in Kombination mit dem Darstellungstyp „NativeTextRendering“ führt zu schlechten und manchmal verpixelten Ergebnissen.
Sowohl „ QtTextRendering “ als auch „ CurveTextRendering “ sind hardwarebeschleunigte Verfahren. „ QtTextRendering “ ist das schnellere der beiden Verfahren, beansprucht jedoch mehr Speicher und weist bei großen Abmessungen Rendering-Artefakte auf. „ 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 | Verwendet den Qt-eigenen Rasterisierungsalgorithmus. |
QQuickWindow::NativeTextRendering | 1 | Verwendet den nativen Rasterizer des Betriebssystems für Text. |
QQuickWindow::CurveTextRendering | 2 | Text wird mithilfe eines Kurven-Rasterisierers gerendert, der direkt auf der Grafikhardware läuft. (Eingeführt in Qt 6.7.0.) |
Eigenschaftsdokumentation
[read-only] activeFocusItem : QQuickItem*
Diese Eigenschaft enthält das Element, das derzeit den aktiven Fokus hat, oder „ null “, falls kein Element den aktiven Fokus hat.
Zugriffsfunktionen:
| QQuickItem * | activeFocusItem() const |
Benachrichtigungssignal:
| void | activeFocusItemChanged() |
Siehe auch ` QQuickItem::forceActiveFocus()` und „Tastaturfokus“ unter Qt Quick.
color : QColor
Diese Eigenschaft enthält die Farbe, mit der der Farbpuffer zu Beginn jedes Frames gelöscht wird.
Standardmäßig ist die Löschfarbe 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 “ verfügt immer über ein einziges unsichtbares Stammelement, das den gesamten Inhalt enthält. Um Elemente zu diesem Fenster hinzuzufügen, ordnen Sie die Elemente dem „contentItem“ oder einem bereits vorhandenen Element in der Szene zu.
Zugriffsfunktionen:
| QQuickItem * | contentItem() const |
[read-only, since 6.11] devicePixelRatio : qreal
Gibt das Verhältnis zwischen physischen Pixeln und geräteunabhängigen Pixeln für das Fenster zurück. Dieser Wert hängt vom Bildschirm ab, auf dem sich das Fenster befindet, und kann sich ändern, wenn das Fenster verschoben wird.
Diese Aufzählung wurde in Qt 6.11 eingeführt.
Zugriffsfunktionen:
| qreal | effectiveDevicePixelRatio() const |
Notifier-Signal:
| void | devicePixelRatioChanged() |
transientParent : QWindow*
Diese Eigenschaft enthält das Fenster, für das dieses Fenster ein vorübergehendes Popup-Fenster ist.
Dies ist ein Hinweis für den Fenstermanager, dass dieses Fenster ein Dialog oder Popup im Auftrag des vorübergehenden übergeordneten Fensters ist, bei dem es sich um eine beliebige Art von „ QWindow “ handeln kann.
Damit das Fenster standardmäßig über seinem vorübergehenden übergeordneten Fenster zentriert wird, kann es je nach Fenstermanager erforderlich sein, die Eigenschaft ` flags ` mit einem geeigneten ` Qt::WindowType ` (z. B. ` Qt::Dialog`) festzulegen.
Siehe auch parent().
Dokumentation der Mitgliedsfunktionen
[explicit] QQuickWindow::QQuickWindow(QQuickRenderControl *control)
Erstellt ein Fenster zur Anzeige einer QML-Szene, deren Darstellung vom Objekt „ control “ gesteuert wird. Weitere Informationen finden Sie in der Dokumentation unter QQuickRenderControl.
[explicit] QQuickWindow::QQuickWindow(QWindow *parent = nullptr)
Erstellt ein Fenster zur Anzeige einer QML-Szene, wobei das übergeordnete Fenster parent ist.
[override virtual noexcept] QQuickWindow::~QQuickWindow()
Löscht das Fenster.
[override virtual] QAccessibleInterface *QQuickWindow::accessibleRoot() const
Gibt eine Barrierefreiheitsschnittstelle 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 ausgesendet, bevor der Render-Thread aufgefordert wird, die Synchronisation des Szenengraphen durchzuführen.
Im Gegensatz zu anderen ähnlichen Signalen wird dieses Signal im GUI-Thread statt im Render-Thread ausgesendet. Es kann verwendet werden, um externe Animationssysteme mit dem QML-Inhalt zu synchronisieren. Gleichzeitig bedeutet dies, dass dieses Signal nicht zum Auslösen von Grafikoperationen geeignet ist.
[signal, since 6.0] void QQuickWindow::afterFrameEnd()
Dieses Signal wird ausgelöst, wenn der Szenenbaum einen Frame übermittelt hat. Es wird nach allen anderen damit zusammenhängenden Signalen, wie beispielsweise „ afterRendering()“, ausgelöst. Es ist das letzte Signal, das vom Rendering-Thread des Szenenbaums beim Rendern eines Frames ausgelöst wird.
Hinweis: Im Gegensatz zu „ frameSwapped()“ wird dieses Signal garantiert auch dann ausgelöst, wenn die Ausgabe von „ Qt Quick “ über „ QQuickRenderControl “ umgeleitet wird.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgesendet. Wenn Ihre Slot-Funktion abgeschlossen sein 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 Szenengraf die Befehle für seinen Haupt-Render-Durchlauf aufgezeichnet hat, der Durchlauf im Befehlspuffer jedoch noch nicht abgeschlossen ist.
Dieses Signal wird früher ausgelöst als „ afterRendering()“ und garantiert, dass nicht nur der Frame, sondern auch die Aufzeichnung des Hauptrenderdurchlaufs des Szenengrafiks noch aktiv ist. Dies ermöglicht das Einfügen von Befehlen, ohne einen gesamten, separaten Renderdurchlauf generieren zu müssen (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 aus einem Renderdurchlauf heraus in die Warteschlange gestellt werden. Daher muss bei komplexeren Benutzer-Renderings sowohl eine Verbindung zu ` beforeRendering()` als auch zu diesem Signal hergestellt werden.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgesendet. Wenn Ihre Slot-Funktion abgeschlossen sein 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“ unter QML.
[signal] void QQuickWindow::afterRendering()
afterRenderPassRecording beforeRendering beforeRenderPassRecording beforeRenderingDas Signal wird ausgesendet, nachdem der Szenengraph 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 über ` QSGRendererInterface` zuvor native Ressourcen wie den Befehlspuffer abfragen. Beachten Sie jedoch, dass der Render-Durchlauf (oder die Durchläufe) zu diesem Zeitpunkt bereits aufgezeichnet sind und es nicht möglich ist, weitere Befehle innerhalb des Durchlaufs des Szenengraphen hinzuzufügen. afterRenderPassRecording
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgesendet. Wenn Ihre Slot-Funktion abgeschlossen sein muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Hinweis: Beachten Siebei der Verwendung von OpenGL, dass das Setzen von OpenGL 3.x- oder 4.x-spezifischen Zuständen und das Belassen dieser in aktiviertem Zustand oder mit von den Standardwerten abweichenden Werten bei der Rückkehr aus dem verbundenen Slot das Rendering des Szenengraphen beeinträchtigen kann. Das vom Szenengraphen für das Rendering verwendete QOpenGLContext wird gebunden, wenn das Signal ausgesendet wird.
Siehe auch „ rendererInterface()“, „Szenengrafik – RHI unter QML“, „Szenengrafik – OpenGL unter QML“, „Szenengrafik – Metal unter QML“, „Szenengrafik – Vulkan unter QML“ und „Szenengrafik – Direct3D 11 unter QML“.
[signal] void QQuickWindow::afterSynchronizing()
Dieses Signal wird ausgelöst, nachdem der Szenengraph mit dem QML-Zustand synchronisiert wurde.
Dieses Signal kann verwendet werden, um die nach dem Aufruf von ` QQuickItem::updatePaintNode()` erforderlichen Vorbereitungen zu treffen, solange der GUI-Thread noch gesperrt ist.
Bei Verwendung von OpenGL wird zu diesem Zeitpunkt der vom Szenenbaum für das Rendering verwendete ` QOpenGLContext ` gebunden.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgesendet. Wenn Ihre Slot-Funktion abgeschlossen sein muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Warnung: Beachten Siebei der Verwendung von OpenGL, dass das Setzen von OpenGL 3.x- oder 4.x-spezifischen Zuständen und das Belassen dieser in aktiviertem Zustand oder auf Nicht-Standardwerten bei der Rückkehr aus dem verbundenen Slot das Rendern des Szenengraphen beeinträchtigen kann.
[signal, since 6.0] void QQuickWindow::beforeFrameBegin()
Dieses Signal wird ausgesendet, bevor der Szenengraph 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 dieser mit der Vorbereitung eines neuen Bildes beginnt.
Dieses Signal ist für Grafik-Frameworks auf niedrigerer Ebene relevant, die bestimmte Operationen, wie z. B. die Bereinigung von Ressourcen, in einer Phase ausführen müssen, in der ` Qt Quick ` die Aufzeichnung eines neuen Frames über die zugrunde liegenden Rendering-Hardware-Schnittstellen-APIs noch nicht initiiert hat.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgegeben. Wenn Ihre Slot-Funktion vor der Fortsetzung der Ausführung abgeschlossen sein muss, 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 ausgesendet, bevor der Szenengrafik-Baum mit der Aufzeichnung von Befehlen für den Hauptrenderdurchlauf beginnt. (Ebenen haben ihre eigenen Durchläufe und sind zum Zeitpunkt der Aussendung dieses Signals bereits vollständig aufgezeichnet.) Der Renderdurchlauf ist zum Zeitpunkt der Aussendung des Signals bereits im Befehlspuffer aktiv.
Dieses Signal wird später als „ beforeRendering()“ ausgesendet und garantiert, dass nicht nur der Frame, sondern auch die Aufzeichnung des Hauptrenderdurchlaufs des Szenengraphen aktiv ist. Dies ermöglicht das Einfügen von Befehlen, ohne einen vollständigen, separaten Renderdurchlauf generieren zu müssen (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 aus einem Renderdurchlauf heraus in die Warteschlange gestellt werden. Daher muss bei komplexeren Benutzer-Renderings sowohl eine Verbindung zu ` beforeRendering()` als auch zu diesem Signal hergestellt werden.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgesendet. Wenn Ihre Slot-Funktion abgeschlossen sein muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Siehe auch „ rendererInterface()“ und „Szenengrafik – RHI unter QML“.
[signal] void QQuickWindow::beforeRendering()
Dieses Signal wird ausgegeben, nachdem die Vorbereitungen für das Bild abgeschlossen sind, d. h., es liegt gegebenenfalls ein Befehlspuffer im Aufnahmemodus vor. Falls gewünscht, kann die mit diesem Signal verbundene Slot-Funktion native Ressourcen wie den Befehl zuvor über „ QSGRendererInterface “ abfragen. Beachten Sie jedoch, dass die Aufzeichnung des Hauptrender-Durchgangs zu diesem Zeitpunkt noch nicht begonnen hat und es nicht möglich ist, Befehle innerhalb dieses Durchgangs hinzuzufügen. Das Starten eines Durchgangs bedeutet das Löschen der Farb-, Tiefen- und Stencil-Puffer, sodass es nicht möglich ist, eine Unterlags-Rendering-Art zu erzielen, indem man sich lediglich an dieses Signal anschließt. Schließen Sie sich stattdessen an „ beforeRenderPassRecording()“ an. Die Verbindung zu diesem Signal ist jedoch weiterhin wichtig, wenn die Aufzeichnung von Befehlen vom Typ „copy“ gewünscht wird, da diese nicht innerhalb eines Render-Durchgangs in die Warteschlange gestellt werden können.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgegeben. Wenn Ihre Slot-Funktion abgeschlossen sein muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Hinweis: Beachten Siebei der Verwendung von OpenGL, dass das Setzen von OpenGL 3.x- oder 4.x-spezifischen Zuständen und das Belassen dieser in aktiviertem Zustand oder mit nicht standardmäßigen Werten bei der Rückkehr aus dem verbundenen Slot das Rendern des Szenengraphen beeinträchtigen kann. Der vom Szenengraphen für das Rendern verwendete „ QOpenGLContext “ wird gebunden, wenn das Signal ausgesendet wird.
Siehe auch „ rendererInterface()“, „Szenengrafik – RHI unter QML“, „Szenengrafik – OpenGL unter QML“, „Szenengrafik – Metal unter QML“, „Szenengrafik – Vulkan unter QML“ und „Szenengrafik – Direct3D 11 unter QML“.
[signal] void QQuickWindow::beforeSynchronizing()
Dieses Signal wird ausgesendet, bevor der Szenengraph mit dem QML-Zustand synchronisiert wird.
Auch wenn das Signal vom Rendering-Thread des Szenengraphen ausgesendet wird, wird garantiert, dass der GUI-Thread blockiert wird, genau wie bei ` QQuickItem::updatePaintNode()`. Daher ist es sicher, in einem Slot oder Lambda, der mit ` Qt::DirectConnection` verbunden ist, auf Daten des GUI-Threads zuzugreifen.
Dieses Signal kann verwendet werden, um alle erforderlichen Vorbereitungen vor dem Aufruf von ` QQuickItem::updatePaintNode()` zu treffen.
Bei Verwendung von OpenGL wird an dieser Stelle das für das Rendering durch den Szenenbaum verwendete ` QOpenGLContext ` gebunden.
Warnung: Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgesendet. Wenn Ihre Slot-Funktion abgeschlossen sein muss, bevor die Ausführung fortgesetzt wird, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Warnung: Beachten Siebei der Verwendung von OpenGL, dass das Setzen von OpenGL 3.x- oder 4.x-spezifischen Zuständen und das Belassen dieser in aktiviertem Zustand oder mit von den Standardwerten abweichenden Werten bei der Rückkehr aus dem verbundenen Slot das Rendering des Szenengraphen beeinträchtigen kann.
void QQuickWindow::beginExternalCommands()
Wenn Rohgrafikbefehle (OpenGL, Vulkan, Metal usw.) mit dem Rendering über den Szenengraphen kombiniert werden, muss diese Funktion aufgerufen werden, bevor Befehle in den Befehlspuffer geschrieben werden, den der Szenengraph zum Rendern seines Hauptrenderdurchgangs verwendet. Damit soll eine Überschreibung des Status verhindert werden.
In der Praxis wird diese Funktion häufig aus einem Slot aufgerufen, der mit den Signalen „ beforeRenderPassRecording()“ oder „ afterRenderPassRecording()“ verbunden ist.
Die Funktion muss nicht aufgerufen werden, wenn Befehle in den anwendungsspezifischen Befehlspuffer geschrieben werden (z. B. einen VkCommandBuffer oder MTLCommandBuffer + MTLRenderCommandEncoder, der von der Anwendung erstellt und verwaltet wird und nicht aus dem Szenenbaum stammt). Bei Grafik-APIs, bei denen kein natives Befehlspuffer-Konzept bereitgestellt wird (OpenGL, Direct 3D 11), bieten „beginExternalCommands()“ und „ endExternalCommands()“ gemeinsam einen Ersatz für die Qt-5-Funktion „resetOpenGLState()“.
Der Aufruf dieser Funktion und von ` endExternalCommands()` ist innerhalb der ` render()`-Implementierung eines „ QSGRenderNode “ nicht erforderlich, da der Szenenbaum die notwendigen Schritte für Render-Knoten implizit ausführt.
Auf native Grafikobjekte (wie z. B. Grafikgeräte, Befehlspuffer oder Encoder) kann über ` QSGRendererInterface::getResource()` zugegriffen werden.
Warnung: Beachten Sie , dass ` QSGRendererInterface::CommandListResource ` zwischen `beginExternalCommands()` und ` endExternalCommands()` möglicherweise ein anderes Objekt zurückgibt. Dies kann passieren, wenn die zugrunde liegende Implementierung einen dedizierten sekundären Befehlspuffer für die Aufzeichnung externer Grafikbefehle innerhalb eines Render-Durchgangs bereitstellt. Fragen Sie daher nach dem Aufruf dieser Funktion immer `CommandListResource` ab. Versuchen Sie nicht, ein Objekt aus einer früheren Abfrage wiederzuverwenden.
Hinweis: Wenn der Szenengrafikbaum OpenGL verwendet, beachten Sie, dass der OpenGL-Status im Kontext beliebige Einstellungen haben kann und diese Funktion keine Rücksetzung des Status auf die Standardwerte vornimmt.
Siehe auch „ endExternalCommands()“ und „ QQuickOpenGLUtils::resetOpenGLState()“.
[override virtual protected] void QQuickWindow::closeEvent(QCloseEvent *e)
Implementiert: ` QWindow::closeEvent(QCloseEvent *ev)`.
QSGImageNode *QQuickWindow::createImageNode() const
Erstellt einen einfachen Bildknoten. Wenn der Szenengraf noch 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
Erstellt einen „Nine-Patch“-Knoten. Wenn der Szenengraf noch nicht initialisiert ist, ist der Rückgabewert null.
QSGRectangleNode *QQuickWindow::createRectangleNode() const
Erstellt einen einfachen Rechteck-Knoten. Ist der Szenengraph nicht initialisiert, 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
Erstellt einen Textknoten. Wenn der Szenengraph 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
Erstellt ein neues ` QSGTexture ` aus dem übergebenen ` image`. Verfügt das Bild über einen Alphakanal, so verfügt auch die entsprechende Textur über einen Alphakanal.
Der Aufrufer der Funktion ist für das Löschen der zurückgegebenen Textur verantwortlich. Das zugrunde liegende native Texturobjekt wird dann zusammen mit dem ` QSGTexture` zerstört.
Wenn ` options ` den Wert ` TextureCanUseAtlas` enthält, kann die Engine das Bild in einen Texturatlas einfügen. Texturen in einem Atlas müssen für ihre Geometrie auf ` QSGTexture::normalizedTextureSubRect()` zurückgreifen und unterstützen ` QSGTexture::Repeat` nicht. Andere Werte aus ` CreateTextureOption ` werden ignoriert.
Wenn „ options “ den Wert „ TextureIsOpaque “ enthält, erstellt die Engine eine RGB-Textur, die bei „ QSGTexture::hasAlphaChannel()“ den Wert „false“ zurückgibt. Opake Texturen lassen sich in den meisten Fällen schneller rendern. Ist dieses Flag nicht gesetzt, verfügt die Textur über einen Alphakanal, der auf dem Bildformat basiert.
Wenn ` options ` den Wert ` TextureHasMipmaps` enthält, erstellt die Engine eine Textur, die Mipmap-Filterung nutzen kann. Mipmap-Texturen können nicht in einem Atlas enthalten sein.
Die Einstellung von ` TextureHasAlphaChannel ` auf ` options ` hat für diese Funktion keine Auswirkung, da standardmäßig von einem Alphakanal und einer Überblendung ausgegangen wird. Um dies zu deaktivieren, setzen Sie ` TextureIsOpaque`.
Wenn der Szenengraph OpenGL verwendet, nutzt die zurückgegebene Textur „ GL_TEXTURE_2D “ als Texturziel und „ GL_RGBA “ als internes Format. Bei anderen Grafik-APIs ist das Texturformat in der Regel „ RGBA8 “. Implementieren Sie „ QSGTexture “ neu, um Texturen mit anderen Parametern zu erstellen.
Warnung: Diese Funktion gibt 0 zurück, wenn der Szenenbaum 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 geschieht durch Löschen der Textur aus einem ` QSGNode `-Destruktor oder durch Aufruf von ` deleteLater()` in dem Fall, dass die Textur bereits eine Affinität zum Rendering-Thread aufweist.
Diese Funktion kann sowohl vom Haupt- als auch vom Render-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
Erstellt ein neues ` QSGTexture ` aus dem übergebenen ` texture`.
Verwenden Sie ` options `, um die Texturattribute anzupassen. Diese Funktion berücksichtigt ausschließlich das Flag ` TextureHasAlphaChannel `. Ist dieses gesetzt, wird das resultierende ` QSGTexture ` vom Szenengraph-Renderer stets so behandelt, als ob ein Blending erforderlich wäre. Bei vollständig opaken Texturen kann das Weglassen des Flags die Kosten für die Durchführung eines Alpha-Blendings während des Renderings einsparen. Das Flag steht in keinem direkten Zusammenhang mit dem „ format “ des „ QRhiTexture “, d. h., es ist völlig normal, das Flag nicht zu setzen, während ein Texturformat wie das häufig verwendete „ QRhiTexture::RGBA8 “ verwendet wird.
Das Mipmapping wird nicht über „ options “ gesteuert, da „ texture “ bereits erstellt wurde und das Vorhandensein oder Fehlen von Mipmaps bereits fest eingebettet ist.
Das zurückgegebene ` QSGTexture ` besitzt das ` QRhiTexture`, was bedeutet, dass ` texture ` zusammen mit dem zurückgegebenen ` QSGTexture` zerstört wird.
Ob „ texture “ Eigentümer seiner zugrunde liegenden nativen Grafikressourcen (OpenGL-Texturobjekt, Vulkan-Bild usw.) ist, hängt davon ab, wie „ QRhiTexture “ erstellt wurde (QRhiTexture::create() oder QRhiTexture::createFrom()), und wird von dieser Funktion weder gesteuert noch geändert.
Hinweis: Dies funktioniert nur, wenn der Szenengraph bereits initialisiert wurde und die standardmäßige, auf „ QRhi “ basierende Anpassung verwendet. Andernfalls ist der Rückgabewert ein „ 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.
[signal, since 6.11] void QQuickWindow::devicePixelRatioChanged()
Dieses Signal wird ausgegeben, wenn sich das effektive Bildpunktverhältnis des Geräts geändert hat.
Hinweis: Notifier -Signal für die Eigenschaft „ devicePixelRatio “.
Diese Funktion wurde in Qt 6.11 eingeführt.
Siehe auch ` effectiveDevicePixelRatio()`.
qreal QQuickWindow::effectiveDevicePixelRatio() const
Gibt das Gerätepixelverhältnis für dieses Fenster zurück.
Dies unterscheidet sich von ` QWindow::devicePixelRatio()` dadurch, dass es das umgeleitete Rendering über ` QQuickRenderControl ` und ` QQuickRenderTarget` unterstützt. Bei Verwendung eines ` QQuickRenderControl` wird das ` QQuickWindow ` oft nicht vollständig erstellt, was bedeutet, dass es nie angezeigt wird und kein zugrunde liegendes natives Fenster im Fenstersystem erstellt wird. Infolgedessen kann die Abfrage von Eigenschaften wie dem Gerätepixelverhältnis keine korrekten Ergebnisse liefern. Diese Funktion berücksichtigt sowohl ` QQuickRenderControl::renderWindowFor()` als auch ` QQuickRenderTarget::devicePixelRatio()`. Wenn keine Umleitung aktiv ist, entspricht das Ergebnis dem von ` QWindow::devicePixelRatio()`.
Hinweis: Getter -Funktion für die Eigenschaft „ devicePixelRatio “.
Siehe auch „ QQuickRenderControl“ , „ QQuickRenderTarget “, „ setRenderTarget()“ und „ QWindow::devicePixelRatio()“.
void QQuickWindow::endExternalCommands()
Wenn Rohgrafikbefehle (OpenGL, Vulkan, Metal usw.) mit dem Rendering über den Szenengraphen kombiniert werden, muss diese Funktion aufgerufen werden, nachdem die Befehle in den Befehlspuffer geschrieben wurden, den der Szenengraph zum Rendern seines Hauptrenderdurchgangs verwendet. Damit soll eine Überschreibung des Status verhindert werden.
In der Praxis wird diese Funktion häufig aus einem Slot aufgerufen, der mit den Signalen „ beforeRenderPassRecording()“ oder „ afterRenderPassRecording()“ verbunden ist.
Die Funktion muss nicht aufgerufen werden, wenn Befehle in den anwendungsspezifischen Befehlspuffer geschrieben werden (z. B. einen VkCommandBuffer oder MTLCommandBuffer + MTLRenderCommandEncoder, der von der Anwendung erstellt und verwaltet wird und nicht aus dem Szenenbaum stammt). Bei Grafik-APIs, bei denen kein natives Befehlspuffer-Konzept bereitgestellt wird (OpenGL, Direct 3D 11), bilden „ beginExternalCommands()“ und „endExternalCommands()“ zusammen einen Ersatz für die Qt-5-Funktion „resetOpenGLState()“.
Der Aufruf dieser Funktion und von ` beginExternalCommands()` ist innerhalb der ` render()`-Implementierung eines ` QSGRenderNode ` nicht erforderlich, da der Szenenbaum die notwendigen Schritte für Render-Knoten implizit durchführt.
Siehe auch ` beginExternalCommands()` und ` QQuickOpenGLUtils::resetOpenGLState()`.
[override virtual protected] bool QQuickWindow::event(QEvent *event)
Implementiert: ` QWindow::event(QEvent *ev)`.
[override virtual protected] void QQuickWindow::exposeEvent(QExposeEvent *)
Implementiert: ` QWindow::exposeEvent` (`QExposeEvent *ev`).
[override virtual protected] void QQuickWindow::focusInEvent(QFocusEvent *ev)
Umsetzt: ` QWindow::focusInEvent(QFocusEvent *ev)`.
[override virtual protected] void QQuickWindow::focusOutEvent(QFocusEvent *ev)
Umsetzt: ` QWindow::focusOutEvent(QFocusEvent *ev)`.
[signal] void QQuickWindow::frameSwapped()
Dieses Signal wird ausgegeben, wenn ein Frame zur Darstellung in die Warteschlange gestellt wurde. Bei aktivierter vertikaler Synchronisation wird das Signal in einer kontinuierlich animierten Szene höchstens einmal pro vsync-Intervall ausgegeben.
Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgegeben.
QImage QQuickWindow::grabWindow()
Ruft den Inhalt des Fensters ab und gibt ihn als Bild zurück.
Die Funktion `grabWindow()` kann auch aufgerufen werden, wenn das Fenster nicht sichtbar ist. Voraussetzung hierfür ist, dass das Fenster ` created ` ist, eine gültige Größe hat und keine anderen ` QQuickWindow `-Instanzen im selben Prozess gerendert werden.
Hinweis: Bei Verwendung dieses Fensters in Kombination mit ` QQuickRenderControl` ist das Ergebnis dieser Funktion ein leeres Bild, es sei denn, das ` software `-Backend wird verwendet. Dies liegt daran, dass bei der Umleitung der Ausgabe an eine von der Anwendung verwaltete Grafikressource (z. B. eine Textur) mithilfe von ` QQuickRenderControl ` und ` setRenderTarget()` die Anwendung besser geeignet ist, einen eventuellen Rücklesevorgang zu verwalten und auszuführen, da sie von vornherein die volle Kontrolle über die Ressource hat.
Warnung: Der Aufruf dieser Funktion führt zu Leistungsproblemen.
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 würde, wenn dieser zu diesem Zeitpunkt initialisiert würde.
Die übliche Vorgehensweise, um die vom Szenengraphen verwendete API abzufragen, besteht darin, ` QSGRendererInterface::graphicsApi()` aufzurufen, sobald der Szenengraph initialisiert ist, beispielsweise wenn oder nachdem das Signal ` sceneGraphInitialized()` ausgesendet wurde. In diesem Fall erhält man das tatsächliche, echte Ergebnis, da dann bekannt ist, dass alles korrekt unter Verwendung dieser Grafik-API initialisiert wurde.
Dies ist jedoch nicht immer praktikabel. Wenn die Anwendung externe Frameworks einrichten muss oder mit ` setGraphicsDevice()` in einer Weise arbeiten muss, die von der integrierten API-Auswahl-Logik des Szenengraphen abhängt, ist es nicht immer möglich, solche Operationen aufzuschieben, bis das Signal ` 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ürde.
Hinweis: Diese statische Funktion ist ausschließlich für den Aufruf im Haupt- (GUI-)Thread vorgesehen. Verwenden Sie zum Abfragen der API beim Rendern QSGRendererInterface, da dieses Objekt im Render-Thread läuft.
Hinweis: Diese Funktion berücksichtigt keine Szenengraph-Backends.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch ` setGraphicsApi()`.
[since 6.0] QQuickGraphicsConfiguration QQuickWindow::graphicsConfiguration() const
Gibt das an „ setGraphicsConfiguration()“ übergebene „ QQuickGraphicsConfiguration “ zurück oder andernfalls ein standardmäßig initialisiertes Exemplar.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch ` setGraphicsConfiguration()`.
[since 6.0] QQuickGraphicsDevice QQuickWindow::graphicsDevice() const
Gibt das an „ setGraphicsDevice()“ übergebene „ QQuickGraphicsDevice “ zurück, andernfalls ein standardmäßig konstruiertes Objekt
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch ` setGraphicsDevice()`.
const QQuickWindow::GraphicsStateInfo &QQuickWindow::graphicsStateInfo()
Gibt eine Referenz auf eine „ GraphicsStateInfo “-Struktur zurück, die einen Teil des internen Zustands des RHI beschreibt, insbesondere den Status der doppelten oder dreifachen Pufferung des Backends (z. B. der Vulkan- oder Metal-Integrationen). Dies ist relevant, wenn die zugrunde liegenden Grafik-APIs Vulkan oder Metal sind und der externe Rendering-Code eine doppelte oder dreifache Pufferung seiner sich häufig ändernden Ressourcen, wie z. B. Uniform-Buffer, durchführen möchte, um ein Blockieren der Pipeline zu vermeiden.
[static] bool QQuickWindow::hasDefaultAlphaBuffer()
Gibt zurück, ob bei neu erstellten Fenstern Alpha-Transparenz verwendet werden soll.
Siehe auch „ setDefaultAlphaBuffer()“.
[override virtual protected] void QQuickWindow::hideEvent(QHideEvent *)
Implementiert: ` QWindow::hideEvent(QHideEvent *ev)`.
QQmlIncubationController *QQuickWindow::incubationController() const
Gibt einen Inkubations-Controller zurück, der die Inkubation zwischen den Frames für dieses Fenster einfügt. „ QQuickView “ installiert diesen Controller automatisch für Sie; andernfalls müssen Sie ihn selbst mithilfe von „ QQmlEngine::setIncubationController()“ installieren.
Der Controller gehört zum Fenster und wird gelöscht, wenn das Fenster geschlossen wird.
bool QQuickWindow::isPersistentGraphics() const
Gibt zurück, ob wichtige Grafikressourcen während der Laufzeit von ` QQuickWindow` freigegeben werden können.
Hinweis: Dies ist ein Hinweis; es wird nicht garantiert, dass er berücksichtigt wird.
Siehe auch ` setPersistentGraphics()`.
bool QQuickWindow::isPersistentSceneGraph() const
Gibt zurück, ob die Knoten und Ressourcen des Szenengrafiks während der Lebensdauer dieses ` QQuickWindow` freigegeben werden können.
Hinweis: Dies ist ein Hinweis. Wann und wie dies geschieht, ist implementierungsabhängig.
bool QQuickWindow::isSceneGraphInitialized() const
Gibt „true“ zurück, wenn der Szenengraph initialisiert wurde; andernfalls „false“.
[override virtual protected] void QQuickWindow::keyPressEvent(QKeyEvent *e)
Implementiert: ` QWindow::keyPressEvent(QKeyEvent *ev)`.
[override virtual protected] void QQuickWindow::keyReleaseEvent(QKeyEvent *e)
Implementiert: ` QWindow::keyReleaseEvent(QKeyEvent *ev)`.
[override virtual protected] void QQuickWindow::mouseDoubleClickEvent(QMouseEvent *event)
Implementiert: ` QWindow::mouseDoubleClickEvent(QMouseEvent *ev)`.
[override virtual protected] void QQuickWindow::mouseMoveEvent(QMouseEvent *event)
Implementiert: ` QWindow::mouseMoveEvent(QMouseEvent *ev)`.
[override virtual protected] void QQuickWindow::mousePressEvent(QMouseEvent *event)
Implementiert: ` QWindow::mousePressEvent(QMouseEvent *ev)`.
[override virtual protected] void QQuickWindow::mouseReleaseEvent(QMouseEvent *event)
Implementiert: ` QWindow::mouseReleaseEvent(QMouseEvent *ev)`.
[slot] void QQuickWindow::releaseResources()
Diese Funktion versucht, überflüssige Ressourcen freizugeben, die derzeit von der QML-Szene belegt sind.
Der Aufruf dieser Funktion fordert den Szenengraphen auf, zwischengespeicherte Grafikressourcen wie Grafik-Pipeline-Objekte, Shader-Programme oder Bilddaten freizugeben.
Darüber hinaus kann diese Funktion je nach verwendeter Render-Schleife dazu führen, dass der Szenengraph und alle fensterbezogenen Rendering-Ressourcen freigegeben werden. In diesem Fall wird das Signal „ sceneGraphInvalidated()“ ausgesendet, wodurch Benutzer ihre eigenen Grafikressourcen bereinigen können. Die Funktionen „ setPersistentGraphics()“ und „ setPersistentSceneGraph()“ können verwendet werden, um dies zu verhindern, falls die Aufräumung in der Anwendung nicht durchführbar ist – allerdings auf Kosten eines höheren Speicherverbrauchs.
Hinweis: Die Freigabe zwischengespeicherter Grafikressourcen, wie z. B. Grafikpipelines oder Shader-Programme, ist unabhängig von den Persistenz-Hinweisen. Die Freigabe dieser Ressourcen erfolgt unabhängig von den Werten der Hinweise für persistente Grafiken und des Szenengrafen.
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 das an ` setRenderTarget()` übergebene ` QQuickRenderTarget ` zurück oder andernfalls ein standardmäßig initialisiertes Exemplar
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 dem Erstellen des ` QQuickWindow` aufgerufen werden, auch wenn ` isSceneGraphInitialized()` noch `false` ist. Einige Funktionen der Renderer-Schnittstelle, insbesondere ` QSGRendererInterface::getResource()`, sind jedoch erst funktionsfähig, wenn der Szenenbaum gestartet ist und läuft. Backend-Abfragen wie ` QSGRendererInterface::graphicsApi()` oder ` QSGRendererInterface::shaderType()` sind hingegen immer funktionsfähig.
Hinweis: Die Eigentumsrechte am zurückgegebenen Zeiger verbleiben bei Qt. Die zurückgegebene Instanz kann je nach verwendetem Szenengrafik-Backend von verschiedenen „ QQuickWindow “-Instanzen gemeinsam genutzt werden oder auch nicht. Daher wird erwartet, dass Anwendungen für jeden „ QQuickWindow “ das Schnittstellenobjekt abfragen, anstatt den bereits abgefragten Zeiger wiederzuverwenden.
Siehe auch „ QSGRenderNode “ und „ QSGRendererInterface “.
[override virtual protected] void QQuickWindow::resizeEvent(QResizeEvent *ev)
Implementiert: ` QWindow::resizeEvent(QResizeEvent *ev)`.
[since 6.6] QRhi *QQuickWindow::rhi() const
Gibt das „ QRhi “-Objekt zurück, das von diesem Fenster für die Darstellung verwendet wird.
Nur verfügbar, wenn das Fenster die Qt 3D-API und die Shading-Sprachabstraktionen verwendet; das bedeutet, dass das Ergebnis bei Verwendung der „ software “-Anpassung immer null ist.
Das Ergebnis ist nur gültig, wenn die Darstellung initialisiert wurde, was durch die Emission des Signals ` sceneGraphInitialized()` angezeigt wird. Vor diesem Zeitpunkt ist der zurückgegebene Wert `null`. Bei einer regulären, bildschirmbasierten Darstellung ( QQuickWindow ) erfolgt die Initialisierung der Szenengrafik in der Regel, wenn das native Fenster zum ersten Mal angezeigt wird. Bei Verwendung von ` QQuickRenderControl` erfolgt die Initialisierung durch den expliziten Aufruf von ` initialize()`.
In der Praxis ist diese Funktion eine Abkürzung für die Abfrage von ` QRhi ` über ` QSGRendererInterface`.
Diese Funktion wurde in Qt 6.6 eingeführt.
[signal] void QQuickWindow::sceneGraphAboutToStop()
Dieses Signal wird im Render-Thread ausgelöst, wenn der Szenengraph kurz davor ist, das Rendern zu beenden. Dies geschieht in der Regel, weil das Fenster ausgeblendet wurde.
Anwendungen können dieses Signal nutzen, um Ressourcen freizugeben, sollten jedoch darauf vorbereitet sein, diese schnell wieder instanziieren zu müssen. Der Szenenbaum und der Grafikkontext werden zu diesem Zeitpunkt noch nicht freigegeben.
Warnung: Dieses Signal wird vom Render-Thread des Szenengraphen ausgesendet. Wenn Ihre Slot-Funktion vor der Fortsetzung der Ausführung abgeschlossen sein muss, müssen Sie sicherstellen, dass die Verbindung direkt ist (siehe Qt::ConnectionType).
Warnung: Stellen Sie unbedingt sicher, dass ein Signal-Handler für `sceneGraphAboutToStop()` den Grafikkontext in demselben Zustand hinterlässt, in dem er sich beim Aufruf des Signal-Handlers befand. Andernfalls kann es dazu kommen, dass die Szene nicht korrekt gerendert wird.
Siehe auch sceneGraphInvalidated().
[static] QString QQuickWindow::sceneGraphBackend()
Gibt das angeforderte „ Qt Quick “-Scenegraph-Backend zurück.
Hinweis: Der Rückgabewert dieser Funktion kann durch nachfolgende Aufrufe von ` setSceneGraphBackend()` noch veraltet sein, bis das erste ` QQuickWindow ` in der Anwendung erstellt wurde.
Hinweis: Der Wert spiegelt die Angabe in der Umgebungsvariablen ` QT_QUICK_BACKEND ` erst dann wider, wenn 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 sich an dieses Signal anschließen, wenn sie Fehler, wie z. B. Fehler beim Erstellen des Grafikkontexts, auf benutzerdefinierte Weise behandeln möchten. Wenn kein Slot an das Signal angeschlossen ist, verhält sich das Programm anders: Quick gibt das message aus oder zeigt ein Meldungsfeld an und beendet die Anwendung.
Dieses Signal wird vom GUI-Thread ausgegeben.
[signal] void QQuickWindow::sceneGraphInitialized()
Dieses Signal wird ausgelöst, wenn der Szenenbaum initialisiert wurde.
Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgegeben.
[signal] void QQuickWindow::sceneGraphInvalidated()
Dieses Signal wird ausgelöst, wenn der Szenengraph ungültig gemacht wurde.
Dieses Signal bedeutet, dass der verwendete Grafik-Rendering-Kontext ungültig geworden ist und alle mit diesem Kontext verknüpften Benutzerressourcen freigegeben werden sollten.
Beim Rendern mit OpenGL wird der „ QOpenGLContext “ dieses Fensters beim Aufruf dieser Funktion gebunden. Die einzige Ausnahme besteht darin, dass das native OpenGL außerhalb der Kontrolle von Qt zerstört wurde, beispielsweise durch EGL_CONTEXT_LOST.
Dieses Signal wird vom Rendering-Thread des Szenengraphen ausgesendet.
void QQuickWindow::scheduleRenderJob(QRunnable *job, QQuickWindow::RenderStage stage)
Plant die Ausführung von „ job “, sobald die Darstellung dieses Fensters den angegebenen Wert „ stage “ erreicht.
Dies ist eine Erleichterung gegenüber den entsprechenden Signalen in „ QQuickWindow “ für einmalige Aufgaben.
Das Fenster übernimmt die Verantwortung für ` job ` und löscht es, sobald der Auftrag abgeschlossen ist.
Wird das Rendern beendet, bevor „ job “ ausgeführt werden kann, wird der Auftrag ausgeführt und anschließend im Rahmen der Bereinigung des Szenengraphen gelöscht. Wird das Fenster nie angezeigt und findet kein Rendern statt, bevor „ QQuickWindow “ zerstört wird, werden alle ausstehenden Aufträge zerstört, ohne dass ihre `run()`-Methode aufgerufen wird.
Wenn das Rendern in einem anderen Thread stattfindet, wird der Job im Rendering-Thread ausgeführt.
Ist „ stage “ auf „ NoStage “ gesetzt, wird „ job “ bei der ersten sich bietenden Gelegenheit ausgeführt, sobald der Render-Thread nicht mit dem Rendern eines Frames beschäftigt ist. Ist das Fenster zum Zeitpunkt der Übermittlung oder Bearbeitung des Jobs nicht sichtbar und nicht renderbar, wird der Job gelöscht, ohne dass die „run()“-Methode ausgeführt wird. Wird ein nicht-threadbasierter Renderer verwendet, wird die run()-Methode des Jobs synchron ausgeführt. Beim Rendern mit OpenGL wird der OpenGL-Kontext vor der Ausführung eines Jobs – einschließlich „ NoStage “-Jobs – auf den Kontext des Renderers umgestellt.
Hinweis: Diese Funktion löst kein Rendern aus; Jobs, die auf eine andere Phase als „ NoStage “ abzielen, werden in der Warteschlange gespeichert, bis das Rendern an anderer Stelle ausgelöst wird. Um die frühere Ausführung des Jobs zu erzwingen, rufen Sie „ QQuickWindow::update()“ auf;
Siehe auch „ beforeRendering()“, „ afterRendering()“, „ beforeSynchronizing()“, „ afterSynchronizing()“, „ frameSwapped()“ und „ sceneGraphInvalidated()“.
[static] void QQuickWindow::setDefaultAlphaBuffer(bool useAlpha)
useAlpha Legt fest, ob bei neu erstellten Fenstern Alpha-Transparenz verwendet werden soll.
In jeder Anwendung, in der durchsichtige Fenster erstellt werden sollen, muss dieser Wert vor dem Erstellen des ersten ` QQuickWindow` auf `true` gesetzt werden. Der Standardwert ist `false`.
Siehe auch ` hasDefaultAlphaBuffer()`.
[static, since 6.0] void QQuickWindow::setGraphicsApi(QSGRendererInterface::GraphicsApi api)
Fordert die angegebene Grafik api ation an.
Wenn die integrierte Standard-Grafikadaptation verwendet wird, legt ` api ` fest, welche Grafik-API (OpenGL, Vulkan, Metal oder Direct3D) der Szenenbaum zum Rendern verwenden soll. Darüber hinaus ist das Backend „ software “ ebenfalls integriert und kann durch Setzen von ` api ` auf ` QSGRendererInterface::Software` angefordert werden.
Im Gegensatz zu ` setSceneGraphBackend()`, das nur zur Anforderung eines bestimmten Backends (entweder integriert oder als dynamisch geladene Plugins installiert) verwendet werden kann, arbeitet diese Funktion mit dem übergeordneten Konzept der Grafik-APIs. Sie deckt die Backends ab, die mit „ Qt Quick “ ausgeliefert werden, und verfügt daher über entsprechende Werte in der Enumeration ` QSGRendererInterface::GraphicsApi `.
Wird diese Funktion überhaupt nicht aufgerufen und ist auch die entsprechende Umgebungsvariable ` QSG_RHI_BACKEND ` nicht gesetzt, wählt der Szenengraph die zu verwendende Grafik-API basierend auf der Plattform aus.
Diese Funktion ist besonders wichtig in Anwendungen, die ausschließlich für das Rendern mit einer bestimmten API ausgelegt sind. Wenn die Anwendung beispielsweise natives OpenGL- oder Vulkan-Rendering durchführt, muss sichergestellt werden, dass Qt Quick ebenfalls mit OpenGL oder Vulkan rendert. Von solchen Anwendungen wird erwartet, dass sie diese Funktion frühzeitig in ihrer `main()`-Funktion aufrufen.
Hinweis: Der Aufruf der Funktion muss vor der Erstellung des ersten „ QQuickWindow “ in der Anwendung erfolgen. 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, jedoch nur, wenn alle vorhandenen „ QQuickRenderControl “- und „ QQuickWindow “-Instanzen zerstört wurden.
Um abzufragen, welche Grafik-API der Szenenbaum zum Rendern verwendet, rufen Sie ` QSGRendererInterface::graphicsApi()` nach dem Szenenbaum ` has initialized` auf, was typischerweise entweder dann geschieht, wenn das Fenster zum ersten Mal sichtbar wird, oder wenn ` QQuickRenderControl::initialize()` aufgerufen wird.
Um zum Standardverhalten zurückzukehren, bei dem der Szenenbaum die 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 festlegt, 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 beispielsweise OpenXR.
Hinweis: Die Konfiguration wird ignoriert, wenn bestehende Grafikgeräte über ` setGraphicsDevice()` übernommen werden, da der Szenengraph in diesem Fall keine Kontrolle über den tatsächlichen Aufbau dieser Objekte hat.
QQuickGraphicsConfiguration Instanzen werden implizit gemeinsam genutzt, sind kopierbar und können als Wert übergeben werden.
Warnung: Das Setzen von ` QQuickGraphicsConfiguration ` für ein ` QQuickWindow ` muss früh genug erfolgen, nämlich bevor der Szenengraph für dieses Fenster zum ersten Mal initialisiert wird. Bei Bildschirmfenstern bedeutet dies, dass der Aufruf erfolgen muss, bevor ` show()` für ` QQuickWindow ` oder ` QQuickView` aufgerufen wird. Bei ` QQuickRenderControl ` muss die Konfiguration abgeschlossen sein, bevor ` initialize()` aufgerufen wird.
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 Szenengrafikbaum verwendet vorhandene Geräte-, physikalische Geräte- und andere Objekte, die über ` device ` angegeben wurden, anstatt neue zu erstellen.
Diese Funktion wird sehr häufig in Kombination mit ` QQuickRenderControl ` und ` setRenderTarget()` verwendet, um das Rendering von ` Qt Quick ` in eine Textur umzuleiten.
Ein standardmäßig initialisiertes ` QQuickGraphicsDevice ` ändert das Standardverhalten in keiner Weise. Sobald ein ` device `, das über eine der QQuickGraphicsDevice -Factory-Funktionen wie beispielsweise ` QQuickGraphicsDevice::fromDeviceObjects()` erstellt wurde, übergeben wird und der Szenengrafikbaum eine passende Grafik-API verwendet (im Beispiel von `fromDeviceObjects()` wäre dies Vulkan), verwendet der Szenengrafikbaum die vorhandenen Geräteobjekte (wie z. B. „ VkPhysicalDevice “, „ VkDevice “ und den Index der Grafikwarteschlangenfamilie im Fall von Vulkan), die von „ QQuickGraphicsDevice “ gekapselt sind. Dies ermöglicht die Verwendung desselben Geräts und somit 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 Szenengrafiks aufgerufen werden und hat keine Wirkung, wenn sie danach aufgerufen wird. In der Praxis bedeutet dies in der Regel, dass sie unmittelbar vor dem Aufruf von ` QQuickRenderControl::initialize()` aufgerufen wird.
Als Beispiel, diesmal mit Direct3D, wird die typische Verwendung voraussichtlich wie folgt aussehen:
// 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 entscheidende Aspekt bei der Verwendung dieser Funktion besteht darin, sicherzustellen, dass Ressourcen oder Handles zu Ressourcen – wie beispielsweise ` 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 eines OpenGL-Kontexts).
QQuickGraphicsDevice Instanzen werden implizit gemeinsam genutzt, sind kopierbar und können als Wert übergeben werden. Sie besitzen nicht die zugehörigen nativen Objekte (wie beispielsweise das `ID3D11Device` im Beispiel).
Hinweis: Die Verwendung von ` QQuickRenderControl ` bedeutet nicht immer, dass diese Funktion aufgerufen werden muss. Wenn die Übernahme eines bestehenden Geräts oder Kontexts nicht erforderlich ist, sollte diese Funktion nicht aufgerufen werden; der Szenengraph initialisiert dann seine eigenen Geräte und Kontexte wie gewohnt, genau wie bei einem Bildschirm 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) beibehalten werden sollen und erst freigegeben werden können, wenn das letzte Fenster gelöscht wurde, und zwar über ` persistent`. Der Standardwert ist `true`.
Beim Aufruf von ` releaseResources()` oder wenn das Fenster ausgeblendet wird (genauer gesagt, nicht mehr renderbar ist), haben einige Render-Schleifen die Möglichkeit, alle Grafikressourcen freizugeben, nicht nur die im Cache gespeicherten. Dies kann vorübergehend Speicher freigeben, bedeutet aber auch, dass die Render-Engine eine vollständige, potenziell aufwendige Neuinitialisierung der Ressourcen durchführen muss, wenn das Fenster erneut gerendert werden soll.
Hinweis: Die Regeln dafür, wann ein Fenster nicht darstellbar ist, sind plattform- und Fenstermanager-spezifisch.
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 berücksichtigt wird.
Hinweis: Dieser Hinweis gilt nicht für zwischengespeicherte Ressourcen, deren Freigabe und spätere Neuerstellung relativ wenig Aufwand erfordern. Daher führt der Aufruf von ` releaseResources()` in der Regel dazu, dass diese Ressourcen freigegeben werden, unabhängig vom Wert dieses Hinweises.
Siehe auch ` isPersistentGraphics()`, ` setPersistentSceneGraph()`, ` sceneGraphInitialized()`, ` sceneGraphInvalidated()` und ` releaseResources()`.
void QQuickWindow::setPersistentSceneGraph(bool persistent)
Legt fest, ob die Knoten und Ressourcen des Szenengraphen „ persistent “ sind. „Persistent“ bedeutet, dass die Knoten und Ressourcen nicht freigegeben werden können. Der Standardwert ist „ true “.
Beim Aufruf von ` releaseResources()` haben einige Render-Schleifen die Möglichkeit, die Knoten des Szenengraphen und die zugehörigen Grafikressourcen freizugeben, wenn das Fenster ausgeblendet wird (genauer gesagt, wenn es nicht renderbar ist). Dadurch wird vorübergehend Speicher freigegeben, was jedoch auch bedeutet, dass der Szenengraph beim nächsten Rendern des Fensters neu aufgebaut werden muss.
Hinweis: Die Regeln dafür, wann ein Fenster nicht darstellbar ist, sind plattform- und fenstermanagerabhängig.
Hinweis: Die Knoten des Szenengraphen und die Ressourcen werden immer freigegeben, wenn das letzte ` QQuickWindow ` gelöscht wird, unabhängig von dieser Einstellung.
Hinweis: Dies ist ein Hinweis; es wird nicht garantiert, dass er berücksichtigt wird.
Siehe auch isPersistentSceneGraph(), setPersistentGraphics(), sceneGraphInvalidated(), sceneGraphInitialized() und releaseResources().
[since 6.0] void QQuickWindow::setRenderTarget(const QQuickRenderTarget &target)
Legt „ target “ als Renderziel für dieses Fenster fest.
Ein ` QQuickRenderTarget ` dient als undurchsichtiger Handle für ein darstellbares natives Objekt – meist eine 2D-Textur – sowie für zugehörige Metadaten, wie beispielsweise die Größe in Pixeln.
Ein standardmäßig erstelltes ` QQuickRenderTarget ` bedeutet, dass keine Umleitung stattfindet. Ein gültiges ` target`, das über eine der statischen Factory-Funktionen ` QQuickRenderTarget ` erstellt wurde, ermöglicht hingegen die Umleitung der Darstellung der ` Qt Quick `-Szene: Diese zielt dann nicht mehr auf die Farbpuffer der mit dem Fenster verknüpften Oberfläche ab, sondern auf die in ` target` angegebenen Texturen oder anderen Grafikobjekte.
Angenommen, der Szenengrafikbaum nutzt Vulkan zum Rendern, so kann man seine Ausgabe beispielsweise in ein ` VkImage` umleiten. Bei Grafik-APIs wie Vulkan muss zudem 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 beispielsweise das `VkImage` im Beispiel).
QQuickRenderTarget rt = QQuickRenderTarget::fromVulkanImage(vulkanImage, VK_IMAGE_LAYOUT_PREINITIALIZED, pixelSize);
quickWindow->setRenderTarget(rt);Diese Funktion wird sehr häufig in Kombination mit ` QQuickRenderControl ` und einem unsichtbaren ` QQuickWindow` verwendet, um Inhalte von ` Qt Quick ` in eine Textur zu rendern, ohne dafür ein natives Fenster auf dem Bildschirm für dieses ` QQuickWindow` zu erstellen.
Wenn sich das gewünschte Ziel oder zugehörige Daten, wie beispielsweise die Größe, ändern, rufen Sie diese Funktion mit einem neuen ` QQuickRenderTarget` auf. Das Erstellen von ` QQuickRenderTarget `-Instanzen und der Aufruf dieser Funktion sind ressourcenschonend, beachten Sie jedoch, dass das Festlegen eines neuen ` target ` mit einem anderen nativen Objekt oder anderen Daten zu potenziell ressourcenintensiven Initialisierungsschritten führen kann, wenn der Szenengrafikbaum im Begriff ist, das nächste Bild zu rendern. Ändern Sie das Ziel daher nur, wenn es notwendig ist.
Hinweis: Das Fenster übernimmt keine Verantwortung für native Objekte, auf die in ` target` verwiesen wird.
Hinweis: Es liegt in der Verantwortung des Aufrufers, sicherzustellen, dass die in ` target ` referenzierten nativen Objekte auch für den Scenegraph-Renderer gültig sind. Bei Vulkan, Metal und Direct3D bedeutet dies beispielsweise, dass die Textur oder das Bild auf demselben Grafikgerät erstellt wird, das auch intern vom Scenegraph verwendet wird. Wenn es sich daher um Texturobjekte handelt, die auf einem bereits vorhandenen Gerät oder in einem bereits bestehenden Kontext erstellt wurden, wird diese Funktion daher häufig in Kombination mit ` setGraphicsDevice()` verwendet.
Hinweis: Bei entsprechenden Grafik-APIs muss die Anwendung auf vom Szenengraphen durchgeführte Änderungen des Bildlayouts achten. Sobald beispielsweise ein `VkImage` durch Aufruf dieser Funktion mit dem Szenengraphen verknüpft wurde, wechselt sein Layout beim Rendern eines Frames zu „ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL “.
Warnung: 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 eine „ Qt Quick “-Szenengrafik an backend. Backends können entweder integriert sein oder in Form von dynamisch geladenen Plugins installiert werden.
Hinweis: Der Aufruf der Funktion muss vor der Erstellung des ersten „ QQuickWindow “ in der Anwendung erfolgen. Er kann danach nicht mehr geändert werden.
Weitere Informationen zur Liste der Backends finden Sie unter „Zwischen Anpassungen in Ihrer Anwendung wechseln “. Ist „ backend “ ungültig oder tritt ein Fehler auf, wird die Anforderung ignoriert.
Hinweis: Der Aufruf dieser Funktion entspricht dem Setzen der Umgebungsvariablen „ QT_QUICK_BACKEND “ oder „ QMLSCENE_DEVICE “. Diese API ist jedoch in Anwendungen, die andere Prozesse starten, sicherer zu verwenden, da man sich keine Gedanken über die Vererbung von Umgebungsvariablen machen muss.
Siehe auch sceneGraphBackend().
[static] void QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType renderType)
Legt den Standard-Rendertyp für textähnliche Elemente in „ Qt Quick “ auf „ renderType “ fest.
Hinweis: Die Einstellung des Darstellungsstyps wirkt sich nur auf danach erstellte Elemente aus; der Darstellungsstyp bestehender Elemente wird nicht geändert.
Siehe auch textRenderType().
[override virtual protected] void QQuickWindow::showEvent(QShowEvent *)
Implementiert: ` QWindow::showEvent(QShowEvent *ev)`.
[since 6.6] QRhiSwapChain *QQuickWindow::swapChain() const
Gibt den von diesem Fenster verwendeten „ QRhiSwapChain “ zurück, sofern vorhanden.
Hinweis: Nur Bildschirmfenster, die von einer der Standard-Render-Schleifen (wie z. B. ` basic ` oder ` threaded`) unterstützt werden, verfügen über eine Swapchain. Andernfalls ist der zurückgegebene Wert `null`. Beispielsweise 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)
Implementiert: ` QWindow::tabletEvent(QTabletEvent *ev)`.
[static] QQuickWindow::TextRenderType QQuickWindow::textRenderType()
Gibt den Darstellungstyp von textähnlichen Elementen in „ Qt Quick “ zurück. Der Standardwert ist „ QQuickWindow::QtTextRendering “.
Siehe auch setTextRenderType().
[slot] void QQuickWindow::update()
Plant die Darstellung eines weiteren Frames im Fenster ein.
Der Aufruf von `QQuickWindow::update()` unterscheidet sich von ` QQuickItem::update()` darin, dass er immer eine Neuzeichnung auslöst, unabhängig davon, ob sich der zugrunde liegende Szenenbaum geändert hat oder nicht.
[override virtual protected] void QQuickWindow::wheelEvent(QWheelEvent *event)
Umsetzt: ` QWindow::wheelEvent(QWheelEvent *ev)`.
© 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.