Sur cette page

QQuickWindow Class

La classe QQuickWindow fournit la fenêtre permettant d'afficher une scène graphique QML. Plus d'informations...

En-tête : #include <QQuickWindow>
CMake : find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake : QT += quick
En QML : Window
Hérite : QWindow
Hérité par :

QQuickView

Types publics

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 }

Propriétés

Fonctions publiques

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

Fonctions publiques réimplémentées

virtual QAccessibleInterface *accessibleRoot() const override

Emplacements publics

void releaseResources()
void update()

Signaux

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()

Membres publics statiques

(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()

Fonctions protégées réimplémentées

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

Description détaillée

QQuickWindow fournit la gestion de scène graphique nécessaire pour interagir avec et afficher une scène de QQuickItems.

Une QQuickWindow possède toujours un seul élément racine invisible. Pour ajouter des éléments à cette fenêtre, il suffit de répartir les éléments sur l'élément racine ou sur un élément existant de la scène.

Pour afficher facilement une scène à partir d'un fichier QML, voir QQuickView.

Rendu

QQuickWindow utilise un graphe de scène pour représenter ce qui doit être rendu. Ce graphe de scène est déconnecté de la scène QML et vit potentiellement dans un autre thread, en fonction de l'implémentation de la plateforme. Comme le graphe de scène de rendu vit indépendamment de la scène QML, il peut également être complètement libéré sans affecter l'état de la scène QML.

Le signal sceneGraphInitialized() est émis sur le thread de rendu avant que la scène QML ne soit rendue à l'écran pour la première fois. Si le graphe de la scène de rendu a été libéré, le signal sera à nouveau émis avant le rendu de la prochaine image. Une QQuickWindow visible à l'écran est pilotée en interne par une render loop, dont plusieurs implémentations sont fournies dans le graphe de scène. Pour plus de détails sur le processus de rendu du graphe de scène, voir Qt Quick Scene Graph.

Par défaut, le rendu d'une QQuickWindow s'effectue à l'aide d'une API graphique 3D accélérée, telle qu'OpenGL ou Vulkan. Voir Scene Graph Adaptations pour un aperçu détaillé des backends de graphes de scène et des API graphiques prises en charge.

Avertissement : Il est essentiel que les opérations graphiques et l'interaction avec le graphe de scène se déroulent exclusivement dans le fil d'exécution du rendu, principalement pendant la phase updatePaintNode().

Attention : Étant donné que de nombreux signaux liés au rendu sont émis par le thread de rendu, les connexions doivent être établies à l'aide de Qt::DirectConnection.

Intégration avec les API graphiques 3D accélérées

Il est possible d'intégrer des appels OpenGL, Vulkan, Metal ou Direct3D 11 directement dans la QQuickWindow, à condition que la QQuickWindow et le graphe de scène sous-jacent effectuent le rendu à l'aide de la même API. Pour accéder aux objets graphiques natifs, tels que les poignées de périphériques ou d'objets contextuels, utilisez QSGRendererInterface. Une instance de QSGRendererInterface peut être interrogée à partir de QQuickWindow en appelant rendererInterface(). Les outils de cette intégration sont les signaux beforeRendering(), beforeRenderPassRecording(), afterRenderPassRecording() et autres signaux connexes. Ils permettent de rendre les sous-couches ou les superpositions. Par ailleurs, QNativeInterface::QSGOpenGLTexture, QNativeInterface::QSGVulkanTexture et d'autres classes similaires permettent d'envelopper une texture native existante ou un objet image dans un QSGTexture qui peut ensuite être utilisé avec le graphe de scène.

Rendu sans accélération

Il existe également une méthode de rendu limitée, purement logicielle. Avec le backend software, un certain nombre de fonctionnalités de Qt Quick ne sont pas disponibles, et les éléments QML qui s'appuient sur ces fonctionnalités ne seront pas rendus du tout. En même temps, cela permet à QQuickWindow d'être fonctionnel même sur des systèmes où il n'y a pas d'API graphique 3D disponible. Voir Qt Quick Software Adaptation pour plus de détails.

Rendu redirigé

Une QQuickWindow n'est pas nécessairement soutenue par une fenêtre native à l'écran. Le rendu peut être redirigé vers une cible de rendu personnalisée, telle qu'une texture native donnée. Pour ce faire, on utilise la classe QQuickRenderControl et des fonctions telles que setRenderTarget(), setGraphicsDevice() et setGraphicsConfiguration().

Dans ce cas, la QQuickWindow représente la scène et fournit l'intrastructure pour le rendu d'une image. Elle ne sera pas soutenue par une boucle de rendu et une fenêtre native. Dans ce cas, c'est l'application qui pilote le rendu, remplaçant ainsi les boucles de rendu. Cela permet de générer des séquences d'images, d'obtenir des textures à utiliser dans des moteurs 3D externes ou de rendre le contenu de Qt Quick dans un environnement VR.

Gestion des ressources

QML essaiera de mettre en cache les images et les nœuds du graphe de scène pour améliorer les performances, mais dans certains scénarios à faible mémoire, il peut être nécessaire de libérer ces ressources de manière agressive. La fonction releaseResources() peut être utilisée pour forcer le nettoyage de certaines ressources, en particulier celles qui sont mises en cache et peuvent être recréées plus tard en cas de besoin.

En outre, l'appel à releaseResources() peut entraîner la libération de l'ensemble du graphe de scène et des ressources graphiques associées. Le signal sceneGraphInvalidated() est alors émis. Ce comportement est contrôlé par les fonctions setPersistentGraphics() et setPersistentSceneGraph().

Note : Toutes les classes avec le préfixe QSG doivent être utilisées uniquement sur le thread de rendu du graphe de scène. Voir Graphique de scène et rendu pour plus d'informations.

Exposition et visibilité

Lorsqu'une instance de QQuickWindow est délibérément cachée avec hide() ou setVisible(false), son rendu s'arrête et son graphique de scène ainsi que son contexte graphique peuvent également être libérés. Cela dépend des paramètres configurés par setPersistentGraphics() et setPersistentSceneGraph(). Le comportement à cet égard est identique à l'appel explicite de la fonction releaseResources(). Une fenêtre peut devenir non exposée, en d'autres termes non rendable, par d'autres moyens également. Cela dépend de la plateforme et du système de fenêtrage. Par exemple, sous Windows, minimiser une fenêtre arrête le rendu. Sous macOS, l'obscurcissement complet d'une fenêtre par d'autres fenêtres déclenche la même chose. Sous Linux/X11, le comportement dépend du gestionnaire de fenêtres.

Contexte OpenGL et formats de surface

Bien qu'il soit possible de spécifier une adresse QSurfaceFormat pour chaque QQuickWindow en appelant la fonction membre setFormat(), les fenêtres peuvent également être créées à partir de QML en utilisant les éléments Window et ApplicationWindow. Dans ce cas, aucun code C++ n'est impliqué dans la création de l'instance de la fenêtre, mais les applications peuvent toujours souhaiter définir certaines valeurs de format de surface, par exemple pour demander une version ou un profil OpenGL donné. Ces applications peuvent appeler la fonction statique QSurfaceFormat::setDefaultFormat() au démarrage. Le format spécifié sera utilisé pour toutes les fenêtres rapides créées par la suite.

Instance Vulkan

Lors de l'utilisation de Vulkan, une QQuickWindow est automatiquement associée à une QVulkanInstance qui est créée et gérée en interne par le graphe de scène. Ainsi, la plupart des applications n'ont pas besoin de se préoccuper d'avoir un VkInstance disponible puisque tout se fait automatiquement. Dans les cas avancés, une application peut souhaiter créer son propre QVulkanInstance, afin de le configurer d'une manière spécifique. C'est également possible. L'appel à setVulkanInstance() sur la QQuickWindow juste après sa construction, avant de la rendre visible, conduit à l'utilisation de la QVulkanInstance fournie par l'application (et de la VkInstance sous-jacente). Lors d'une redirection via QQuickRenderControl, il n'y a pas de QVulkanInstance fourni automatiquement, mais l'application est censée fournir le sien et l'associer à la QQuickWindow.

Contextes et dispositifs graphiques

Lorsque le graphe de scène est initialisé, ce qui se produit généralement lorsque la fenêtre est exposée ou, dans le cas d'un rendu redirigé, l'initialisation est effectuée à l'adresse via QQuickRenderControl, les objets de contexte ou de périphérique nécessaires au rendu sont créés automatiquement. Il s'agit notamment des contextes OpenGL, des périphériques Direct3D et des contextes de périphériques, des périphériques Vulkan et Metal. Ces objets peuvent également être interrogés par le code de l'application par la suite via QSGRendererInterface. Lors de l'utilisation de la boucle de rendu basic, qui effectue tous les rendus sur le thread de l'interface graphique, le même contexte ou périphérique est utilisé avec toutes les QQuickWindows visibles. La boucle de rendu threaded utilise un objet de contexte ou de périphérique dédié pour chaque thread de rendu, et donc pour chaque QQuickWindow. Certaines API graphiques offrent un certain degré de personnalisation via setGraphicsConfiguration(). Il est ainsi possible, par exemple, de spécifier la liste des extensions Vulkan à activer sur le site VkDevice. Il est également possible de fournir un ensemble d'objets de contexte ou de périphérique existants à utiliser par la QQuickWindow, au lieu de la laisser construire ses propres objets. Ceci est possible grâce à setGraphicsDevice().

Voir aussi QQuickView, QQuickRenderControl, QQuickRenderTarget, QQuickGraphicsDevice, QQuickGraphicsConfiguration, et QSGRendererInterface.

Documentation des types de membres

enum QQuickWindow::CreateTextureOption
flags QQuickWindow::CreateTextureOptions

Les enums CreateTextureOption sont utilisés pour personnaliser l'emballage d'une texture.

ConstanteValeurDescription
QQuickWindow::TextureHasAlphaChannel0x0001La texture possède un canal alpha et doit être dessinée en utilisant la technique de l'estompage.
QQuickWindow::TextureHasMipmaps0x0002La texture possède des mipmaps et peut être dessinée avec les mipmaps activés.
QQuickWindow::TextureOwnsGLTexture0x0004Depuis Qt 6.0, ce drapeau n'est pas utilisé en pratique et est ignoré. La propriété des ressources graphiques natives n'est pas transférable au wrapping QSGTexture, parce que Qt Quick peut ne pas avoir les détails nécessaires sur la façon dont un tel objet et la mémoire associée doivent être libérés.
QQuickWindow::TextureCanUseAtlas0x0008L'image peut être téléchargée dans un atlas de textures.
QQuickWindow::TextureIsOpaque0x0010La texture renverra false pour QSGTexture::hasAlphaChannel() et ne sera pas mélangée. Ce drapeau a été ajouté dans Qt 5.6.

Le type CreateTextureOptions est un typedef pour QFlags<CreateTextureOption>. Il stocke une combinaison OU de valeurs CreateTextureOption.

enum QQuickWindow::RenderStage

ConstanteValeurDescription
QQuickWindow::BeforeSynchronizingStage0Avant la synchronisation.
QQuickWindow::AfterSynchronizingStage1Après la synchronisation.
QQuickWindow::BeforeRenderingStage2Avant le rendu.
QQuickWindow::AfterRenderingStage3Après le rendu.
QQuickWindow::AfterSwapStage4Après la permutation des images.
QQuickWindow::NoStage5Dès que possible. Cette valeur a été ajoutée dans Qt 5.6.

Voir aussi Scene Graph et Rendering.

enum QQuickWindow::SceneGraphError

Cette énumération décrit l'erreur dans un signal sceneGraphError().

ConstanteValeurDescription de l'erreur
QQuickWindow::ContextNotAvailable1La création du contexte graphique a échoué. Cela signifie généralement qu'aucune implémentation OpenGL appropriée n'a été trouvée, par exemple parce qu'aucun pilote graphique n'est installé et qu'aucun support OpenGL 2 n'est présent. Sur les cartes mobiles et embarquées qui utilisent OpenGL ES, une telle erreur est susceptible d'indiquer des problèmes dans l'intégration du système de fenêtrage et peut-être une configuration incorrecte de Qt.

enum QQuickWindow::TextRenderType

Cette énumération décrit le type de rendu par défaut des éléments de type texte dans Qt Quick (Text, TextInput, etc.).

Sélectionnez NativeTextRendering si vous préférez que le texte ait un aspect natif sur la plateforme cible et que vous n'avez pas besoin de fonctionnalités avancées telles que la transformation du texte. L'utilisation de ces fonctions en combinaison avec le type de rendu NativeTextRendering donnera des résultats médiocres et parfois pixellisés.

QtTextRendering et CurveTextRendering sont des techniques accélérées par le matériel. QtTextRendering est la plus rapide des deux, mais elle utilise plus de mémoire et présente des artefacts de rendu aux grandes tailles. CurveTextRendering doit être considérée comme une alternative dans les cas où QtTextRendering ne donne pas de bons résultats visuels ou lorsque la réduction de la consommation de mémoire graphique est une priorité.

ConstanteValeurDescription de la constante
QQuickWindow::QtTextRendering0Utilise l'algorithme de tramage propre à Qt.
QQuickWindow::NativeTextRendering1Utilise le rasterizer natif du système d'exploitation pour le texte.
QQuickWindow::CurveTextRendering2Le texte est rendu à l'aide d'un rasterizer de courbes fonctionnant directement sur le matériel graphique. (Introduit dans Qt 6.7.0.)

Documentation sur les propriétés

[read-only] activeFocusItem : QQuickItem*

Cette propriété contient l'élément qui a actuellement le focus actif ou null s'il n'y a pas d'élément avec le focus actif.

Fonctions d'accès :

QQuickItem *activeFocusItem() const

Signal du notificateur :

void activeFocusItemChanged()

Voir également QQuickItem::forceActiveFocus() et Keyboard Focus dans Qt Quick.

color : QColor

Cette propriété définit la couleur utilisée pour effacer le tampon de couleurs au début de chaque image.

Par défaut, la couleur d'effacement est le blanc.

Fonctions d'accès :

QColor color() const
void setColor(const QColor &color)

Signal Notificateur :

void colorChanged(const QColor &)

Voir également setDefaultAlphaBuffer().

[read-only] contentItem : QQuickItem* const

Cette propriété contient l'élément racine invisible de la scène.

Un site QQuickWindow possède toujours un seul élément racine invisible contenant l'ensemble de son contenu. Pour ajouter des éléments à cette fenêtre, il faut les répartir sur le contentItem ou sur un élément existant de la scène.

Fonctions d'accès :

QQuickItem *contentItem() const

[read-only, since 6.11] devicePixelRatio : qreal

Renvoie le rapport entre les pixels physiques et les pixels indépendants du périphérique pour la fenêtre. Cette valeur dépend de l'écran sur lequel se trouve la fenêtre et peut changer lorsque la fenêtre est déplacée.

Cette propriété a été introduite dans Qt 6.11.

Fonctions d'accès :

Signal Notifier :

transientParent : QWindow*

Cette propriété contient la fenêtre pour laquelle cette fenêtre est une fenêtre contextuelle transitoire.

Elle indique au gestionnaire de fenêtres que cette fenêtre est une boîte de dialogue ou une fenêtre contextuelle au nom du parent transitoire, qui peut être n'importe quel type de QWindow.

Pour que la fenêtre soit centrée par défaut au-dessus de son parent transitoire, selon le gestionnaire de fenêtres, il peut également être nécessaire de définir la propriété flags avec un Qt::WindowType approprié (tel que Qt::Dialog).

Voir également parent().

Documentation des fonctions membres

[explicit] QQuickWindow::QQuickWindow(QQuickRenderControl *control)

Construit une fenêtre pour afficher une scène QML, dont le rendu sera contrôlé par l'objet control. Veuillez consulter la documentation de QQuickRenderControl pour plus d'informations.

[explicit] QQuickWindow::QQuickWindow(QWindow *parent = nullptr)

Construit une fenêtre pour afficher une scène QML avec la fenêtre parentale parent.

[override virtual noexcept] QQuickWindow::~QQuickWindow()

Détruit la fenêtre.

[override virtual] QAccessibleInterface *QQuickWindow::accessibleRoot() const

Renvoie une interface d'accessibilité pour cette fenêtre, ou 0 si une telle interface ne peut être créée.

[signal] void QQuickWindow::afterAnimating()

Ce signal est émis par le thread de l'interface graphique avant de demander au thread de rendu d'effectuer la synchronisation du graphe de scène.

Contrairement aux autres signaux similaires, celui-ci est émis dans le fil d'exécution de l'interface graphique et non dans le fil d'exécution du rendu. Il peut être utilisé pour synchroniser des systèmes d'animation externes avec le contenu QML. En même temps, cela signifie que ce signal n'est pas adapté au déclenchement d'opérations graphiques.

[signal, since 6.0] void QQuickWindow::afterFrameEnd()

Ce signal est émis lorsque le graphe de scène a soumis une image. Il est émis après tous les autres signaux connexes, tels que afterRendering(). C'est le dernier signal émis par le thread de rendu du graphe de scène lors du rendu d'une image.

Remarque : contrairement à frameSwapped(), ce signal est garanti d'être émis également lorsque la sortie de Qt Quick est redirigée via QQuickRenderControl.

Attention : Ce signal est émis par le thread de rendu du graphe de scène. Si votre fonction slot doit se terminer avant que l'exécution ne continue, vous devez vous assurer que la connexion est directe (voir Qt::ConnectionType).

Cette fonction a été introduite dans Qt 6.0.

Voir aussi beforeFrameBegin() et rendererInterface().

[signal] void QQuickWindow::afterRenderPassRecording()

Ce signal est émis après que le graphe de scène a enregistré les commandes pour sa passe de rendu principale, mais la passe n'est pas encore finalisée sur le tampon de commande.

Ce signal est émis avant afterRendering(), et il garantit que non seulement l'image mais aussi l'enregistrement de la passe de rendu principale de la scène sont toujours actifs. Cela permet d'insérer des commandes sans avoir à générer une passe de rendu séparée (qui effacerait généralement les images jointes). Les objets graphiques natifs peuvent être interrogés via QSGRendererInterface.

Remarque : les mises à jour de ressources (téléchargements, copies) ne peuvent généralement pas être mises en file d'attente à partir d'une passe de rendu. Par conséquent, un rendu utilisateur plus complexe devra se connecter à la fois à beforeRendering() et à ce signal.

Attention : Ce signal est émis par le thread de rendu du graphe de scène. Si votre fonction slot doit se terminer avant que l'exécution ne se poursuive, vous devez vous assurer que la connexion est directe (voir Qt::ConnectionType).

Voir également rendererInterface() et Scene Graph - RHI Under QML.

[signal] void QQuickWindow::afterRendering()

Le signal est émis après que la scène graphique a ajouté ses commandes au tampon de commandes, qui n'est pas encore soumis à la file d'attente graphique. Si vous le souhaitez, la fonction slot connectée à ce signal peut interroger les ressources natives, comme le tampon de commande, avant via QSGRendererInterface. Notez cependant que la ou les passes de rendu sont déjà enregistrées à ce stade et qu'il n'est pas possible d'ajouter d'autres commandes dans la passe du graphe de scène. Utilisez plutôt afterRenderPassRecording() pour cela. Ce signal a donc une utilisation limitée dans Qt 6, contrairement à Qt 5. C'est plutôt la combinaison de beforeRendering() et beforeRenderPassRecording(), ou beforeRendering() et afterRenderPassRecording(), qui est typiquement utilisée pour obtenir une sous-couche ou une surcouche du rendu personnalisé.

Avertissement : Ce signal est émis par le thread de rendu du graphe de scène. Si votre fonction slot doit se terminer avant que l'exécution ne se poursuive, vous devez vous assurer que la connexion est directe (voir Qt::ConnectionType).

Remarque : si vous utilisez OpenGL, sachez que le fait de définir des états spécifiques à OpenGL 3.x ou 4.x et de les laisser activés ou réglés sur des valeurs autres que celles par défaut lorsque vous revenez du slot connecté peut interférer avec le rendu du graphe de scène. Le site QOpenGLContext utilisé pour le rendu par le graphe de scène sera lié lorsque le signal est émis.

Voir aussi rendererInterface(), Graphique de scène - RHI sous QML, Graphique de scène - OpenGL sous QML, Graphique de scène - Metal sous QML, Graphique de scène - Vulkan sous QML, et Graphique de scène - Direct3D 11 sous QML.

[signal] void QQuickWindow::afterSynchronizing()

Ce signal est émis après la synchronisation du graphe de scène avec l'état QML.

Ce signal peut être utilisé pour effectuer la préparation requise après les appels à QQuickItem::updatePaintNode(), alors que le thread de l'interface graphique est toujours verrouillé.

Lors de l'utilisation d'OpenGL, le QOpenGLContext utilisé pour le rendu par le graphe de scène sera lié à ce moment.

Attention : Ce signal est émis par le thread de rendu du graphe de scène. Si votre fonction slot doit se terminer avant que l'exécution ne se poursuive, vous devez vous assurer que la connexion est directe (voir Qt::ConnectionType).

Attention : Si vous utilisez OpenGL, sachez que le fait de définir des états spécifiques à OpenGL 3.x ou 4.x et de les laisser activés ou réglés sur des valeurs autres que celles par défaut lorsque vous revenez du slot connecté peut interférer avec le rendu du graphe de scène.

[signal, since 6.0] void QQuickWindow::beforeFrameBegin()

Ce signal est émis avant que le graphe de scène ne commence à préparer la trame. Il précède les signaux tels que beforeSynchronizing() ou beforeRendering(). C'est le premier signal émis par le thread de rendu du graphe de scène lorsqu'il commence à préparer une nouvelle image.

Ce signal est utile pour les structures graphiques de niveau inférieur qui doivent exécuter certaines opérations, telles que le nettoyage des ressources, à un stade où Qt Quick n'a pas lancé l'enregistrement d'une nouvelle image via les API de l'interface matérielle de rendu sous-jacente.

Avertissement : Ce signal est émis par le thread de rendu du graphe de scène. Si votre fonction slot doit se terminer avant que l'exécution ne se poursuive, vous devez vous assurer que la connexion est directe (voir Qt::ConnectionType).

Cette fonction a été introduite dans Qt 6.0.

Voir aussi afterFrameEnd() et rendererInterface().

[signal] void QQuickWindow::beforeRenderPassRecording()

Ce signal est émis avant que la scène ne commence à enregistrer les commandes pour la passe de rendu principale. (Les couches ont leurs propres passes et sont entièrement enregistrées au moment où ce signal est émis). La passe de rendu est déjà active sur le tampon de commande lorsque le signal est émis.

Ce signal est émis après beforeRendering() et garantit que non seulement l'image, mais aussi l'enregistrement de la passe de rendu principale de la scène sont actifs. Cela permet d'insérer des commandes sans avoir à générer une passe de rendu séparée (qui effacerait généralement les images jointes). Les objets graphiques natifs peuvent être interrogés via QSGRendererInterface.

Remarque : les mises à jour de ressources (téléchargements, copies) ne peuvent généralement pas être mises en file d'attente à partir d'une passe de rendu. Par conséquent, un rendu utilisateur plus complexe devra se connecter à la fois à beforeRendering() et à ce signal.

Attention : Ce signal est émis par le thread de rendu du graphe de scène. Si votre fonction slot doit se terminer avant que l'exécution ne se poursuive, vous devez vous assurer que la connexion est directe (voir Qt::ConnectionType).

Voir également rendererInterface() et Scene Graph - RHI Under QML.

[signal] void QQuickWindow::beforeRendering()

Ce signal est émis après que les préparatifs de la trame ont été effectués, ce qui signifie qu'il y a un tampon de commande en mode enregistrement, le cas échéant. Si vous le souhaitez, la fonction slot connectée à ce signal peut interroger les ressources natives comme la commande précédente via QSGRendererInterface. Notez cependant que l'enregistrement de la passe de rendu principale n'a pas encore commencé à ce stade et qu'il n'est pas possible d'ajouter des commandes dans cette passe. Démarrer une passe signifie vider les tampons de couleur, de profondeur et de pochoir, il n'est donc pas possible d'obtenir un rendu de type sous-couche en se connectant simplement à ce signal. Il faut plutôt se connecter à beforeRenderPassRecording(). Cependant, la connexion à ce signal reste importante si l'enregistrement de commandes de type copie est souhaité, car celles-ci ne peuvent pas être mises en file d'attente lors d'une passe de rendu.

Attention : Ce signal est émis par le thread de rendu du graphe de scène. Si votre fonction slot doit se terminer avant que l'exécution ne continue, vous devez vous assurer que la connexion est directe (voir Qt::ConnectionType).

Note : Lors de l'utilisation d'OpenGL, il faut savoir que l'activation d'états spécifiques à OpenGL 3.x ou 4.x et le fait de les laisser activés ou réglés sur des valeurs autres que celles par défaut lors du retour du slot connecté peut interférer avec le rendu du graphe de scène. Le site QOpenGLContext utilisé pour le rendu par le graphe de scène sera lié lorsque le signal est émis.

Voir aussi rendererInterface(), Graphique de scène - RHI sous QML, Graphique de scène - OpenGL sous QML, Graphique de scène - Metal sous QML, Graphique de scène - Vulkan sous QML, et Graphique de scène - Direct3D 11 sous QML.

[signal] void QQuickWindow::beforeSynchronizing()

Ce signal est émis avant que le graphe de scène ne soit synchronisé avec l'état QML.

Même si le signal est émis par le thread de rendu du graphe de scène, le thread de l'interface graphique est garanti d'être bloqué, comme il l'est dans QQuickItem::updatePaintNode(). Par conséquent, il n'y a aucun risque à accéder aux données du fil d'exécution de l'interface graphique dans un slot ou un lambda connecté à Qt::DirectConnection.

Ce signal peut être utilisé pour effectuer toute préparation nécessaire avant les appels à QQuickItem::updatePaintNode().

Lors de l'utilisation d'OpenGL, le QOpenGLContext utilisé pour le rendu par le graphe de scène sera lié à ce point.

Attention : Ce signal est émis par le thread de rendu du graphe de scène. Si votre fonction slot doit se terminer avant que l'exécution ne se poursuive, vous devez vous assurer que la connexion est directe (voir Qt::ConnectionType).

Attention : Si vous utilisez OpenGL, sachez que le fait de définir des états spécifiques à OpenGL 3.x ou 4.x et de les laisser activés ou réglés sur des valeurs autres que celles par défaut lorsque vous revenez du slot connecté peut interférer avec le rendu du graphe de scène.

void QQuickWindow::beginExternalCommands()

Lorsque l'on mélange des commandes graphiques brutes (OpenGL, Vulkan, Metal, etc.) avec le rendu du graphe de scène, il est nécessaire d'appeler cette fonction avant d'enregistrer les commandes dans le tampon de commande utilisé par le graphe de scène pour effectuer sa passe de rendu principale. Cela permet d'éviter d'encombrer l'état.

En pratique, cette fonction est souvent appelée à partir d'un slot connecté aux signaux beforeRenderPassRecording() ou afterRenderPassRecording().

Il n'est pas nécessaire d'appeler cette fonction lors de l'enregistrement de commandes dans le propre tampon de commandes de l'application (par exemple, un VkCommandBuffer ou un MTLCommandBuffer + MTLRenderCommandEncoder créé et géré par l'application, et non récupéré à partir du graphe de scène). Avec les API graphiques où aucun concept de tampon de commande natif n'est exposé (OpenGL, Direct 3D 11), beginExternalCommands() et endExternalCommands() fournissent ensemble un remplacement pour la fonction Qt 3D resetOpenGLState().

L'appel à cette fonction et à endExternalCommands() n'est pas nécessaire dans l'implémentation render() d'une QSGRenderNode car le graphe de scène effectue les étapes nécessaires de manière implicite pour les nœuds de rendu.

Les objets graphiques natifs (tels que le périphérique graphique, le tampon de commande ou l'encodeur) sont accessibles via QSGRendererInterface::getResource().

Attention : Attention au fait que QSGRendererInterface::CommandListResource peut renvoyer un objet différent entre beginExternalCommands() - endExternalCommands(). Cela peut se produire lorsque l'implémentation sous-jacente fournit un tampon de commande secondaire dédié pour l'enregistrement des commandes graphiques externes au cours d'une passe de rendu. Par conséquent, interrogez toujours CommandListResource après avoir appelé cette fonction. N'essayez pas de réutiliser un objet provenant d'une requête antérieure.

Remarque : lorsque la scène utilise OpenGL, il faut tenir compte du fait que l'état OpenGL dans le contexte peut avoir des paramètres arbitraires et que cette fonction n'effectue pas de réinitialisation de l'état aux valeurs par défaut.

Voir aussi endExternalCommands() et QQuickOpenGLUtils::resetOpenGLState().

[override virtual protected] void QQuickWindow::closeEvent(QCloseEvent *e)

Réimplémente : QWindow::closeEvent(QCloseEvent *ev).

QSGImageNode *QQuickWindow::createImageNode() const

Crée un nœud image simple. Si le graphe de scène n'est pas initialisé, la valeur de retour est null.

Il s'agit d'une alternative cross-backend à la construction directe de QSGSimpleTextureNode.

Voir aussi QSGImageNode.

QSGNinePatchNode *QQuickWindow::createNinePatchNode() const

Crée un nœud de neuf patchs. Si le graphe de scène n'est pas initialisé, la valeur de retour est null.

QSGRectangleNode *QQuickWindow::createRectangleNode() const

Crée un noeud rectangle simple. Si le graphe de scène n'est pas initialisé, la valeur de retour est null.

Il s'agit d'une alternative cross-backend à la construction directe d'un QSGSimpleRectNode.

Voir aussi QSGRectangleNode.

[since 6.7] QSGTextNode *QQuickWindow::createTextNode() const

Crée un noeud de texte. Si le graphe de scène n'est pas initialisé, la valeur de retour est null.

Cette fonction a été introduite dans Qt 6.7.

Voir aussi QSGTextNode.

QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image, QQuickWindow::CreateTextureOptions options) const

Crée un nouveau QSGTexture à partir de l'image image fournie. Si l'image a un canal alpha, la texture correspondante aura un canal alpha.

L'appelant de la fonction est responsable de la suppression de la texture renvoyée. L'objet texture natif sous-jacent est alors détruit en même temps que l'objet QSGTexture.

Lorsque options contient TextureCanUseAtlas, le moteur peut placer l'image dans un atlas de textures. Les textures dans un atlas doivent s'appuyer sur QSGTexture::normalizedTextureSubRect() pour leur géométrie et ne prendront pas en charge QSGTexture::Repeat. Les autres valeurs de CreateTextureOption sont ignorées.

Lorsque options contient TextureIsOpaque, le moteur crée une texture RVB qui renvoie la valeur false pour QSGTexture::hasAlphaChannel(). Les textures opaques seront dans la plupart des cas plus rapides à rendre. Si ce drapeau n'est pas défini, la texture aura un canal alpha basé sur le format de l'image.

Lorsque options contient TextureHasMipmaps, le moteur crée une texture qui peut utiliser le filtrage mipmap. Les textures mipmap ne peuvent pas faire partie d'un atlas.

Définir TextureHasAlphaChannel dans options ne sert à rien pour cette fonction puisque l'hypothèse d'un canal alpha et d'un mélange est la valeur par défaut. Pour ne pas utiliser cette fonction, définissez TextureIsOpaque.

Lorsque le graphe de scène utilise OpenGL, la texture renvoyée utilisera GL_TEXTURE_2D comme cible de texture et GL_RGBA comme format interne. Avec d'autres API graphiques, le format de texture est généralement RGBA8. Réimplémentez QSGTexture pour créer des textures avec des paramètres différents.

Attention : Cette fonction renvoie 0 si le graphe de scène n'a pas encore été initialisé.

Avertissement : Cette fonction renvoie 0 si le graphe de scène n'a pas encore été initialisé : La texture renvoyée n'est pas gérée en mémoire par le graphe de scène et doit être explicitement supprimée par l'appelant sur le thread de rendu. Pour ce faire, il faut supprimer la texture à partir d'un destructeur QSGNode ou utiliser deleteLater() dans le cas où la texture a déjà une affinité avec le thread de rendu.

Cette fonction peut être appelée à la fois par le thread principal et par le thread de rendu.

Voir également sceneGraphInitialized() et QSGTexture.

QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image) const

Il s'agit d'une fonction surchargée.

[since 6.6] QSGTexture *QQuickWindow::createTextureFromRhiTexture(QRhiTexture *texture, QQuickWindow::CreateTextureOptions options = {}) const

Crée un nouveau QSGTexture à partir du texture fourni.

Utilisez options pour personnaliser les attributs de la texture. Seul le drapeau TextureHasAlphaChannel est pris en compte par cette fonction. Lorsqu'il est activé, le moteur de rendu du graphe de scène considère toujours que l'image QSGTexture doit être mélangée. Pour les textures totalement opaques, le fait de ne pas activer l'indicateur permet d'économiser le coût de l'alpha-blanchiment pendant le rendu. L'indicateur n'a pas de correspondance directe avec le format du QRhiTexture, c'est-à-dire qu'il est tout à fait normal de ne pas activer l'indicateur tout en ayant un format de texture tel que le QRhiTexture::RGBA8 couramment utilisé.

La cartographie n'est pas contrôlée par options puisque texture est déjà créé et que la présence ou l'absence de cartographie y est intégrée.

Le site QSGTexture retourné possède le site QRhiTexture, ce qui signifie que le site texture est détruit en même temps que le site QSGTexture retourné.

Si texture possède ses ressources graphiques natives sous-jacentes (objet de texture OpenGL, image Vulkan, etc.), cela dépend de la façon dont QRhiTexture a été créé (QRhiTexture::create() ou QRhiTexture::createFrom()), et cela n'est pas contrôlé ou modifié par cette fonction.

Remarque : cette fonction ne fonctionne que lorsque le graphe de scène a déjà été initialisé et qu'il utilise l'adaptation par défaut, basée sur QRhi. La valeur de retour est nullptr dans le cas contraire.

Note : Cette fonction ne peut être appelée que sur le thread de rendu du graphe de scène.

Cette fonction a été introduite dans Qt 6.6.

Voir aussi createTextureFromImage(), sceneGraphInitialized(), et QSGTexture.

[signal, since 6.11] void QQuickWindow::devicePixelRatioChanged()

Ce signal est émis lorsque le rapport de pixels effectif de l'appareil a été modifié.

Note : Signal de notification pour la propriété devicePixelRatio.

Cette fonction a été introduite dans Qt 6.11.

Voir aussi effectiveDevicePixelRatio().

qreal QQuickWindow::effectiveDevicePixelRatio() const

Renvoie le ratio de pixels de l'appareil pour cette fenêtre.

Cette fonction est différente de QWindow::devicePixelRatio() dans la mesure où elle prend en charge le rendu redirigé via QQuickRenderControl et QQuickRenderTarget. Lors de l'utilisation de QQuickRenderControl, la fenêtre QQuickWindow n'est souvent pas entièrement créée, ce qui signifie qu'elle n'est jamais affichée et qu'il n'y a pas de fenêtre native sous-jacente créée dans le système de fenêtrage. Par conséquent, l'interrogation de propriétés telles que le rapport de pixels de l'appareil ne peut pas donner de résultats corrects. Cette fonction prend en compte à la fois QQuickRenderControl::renderWindowFor() et QQuickRenderTarget::devicePixelRatio(). Lorsqu'il n'y a pas de redirection, le résultat est le même que celui de QWindow::devicePixelRatio().

Remarque : fonction d'obtention pour la propriété devicePixelRatio.

Voir aussi QQuickRenderControl, QQuickRenderTarget, setRenderTarget(), et QWindow::devicePixelRatio().

void QQuickWindow::endExternalCommands()

Lorsque l'on mélange des commandes graphiques brutes (OpenGL, Vulkan, Metal, etc.) avec le rendu du graphe de scène, il est nécessaire d'appeler cette fonction après avoir enregistré les commandes dans le tampon de commande utilisé par le graphe de scène pour effectuer sa passe de rendu principale. Ceci afin d'éviter d'endommager l'état.

En pratique, cette fonction est souvent appelée à partir d'un slot connecté aux signaux beforeRenderPassRecording() ou afterRenderPassRecording().

Il n'est pas nécessaire d'appeler cette fonction lors de l'enregistrement de commandes dans le propre tampon de commandes de l'application (par exemple, un VkCommandBuffer ou un MTLCommandBuffer + MTLRenderCommandEncoder créé et géré par l'application, et non récupéré à partir du graphe de scène). Avec les API graphiques où aucun concept de tampon de commande natif n'est exposé (OpenGL, Direct 3D 11), beginExternalCommands() et endExternalCommands() fournissent ensemble un remplacement pour la fonction Qt 3D resetOpenGLState().

L'appel à cette fonction et à beginExternalCommands() n'est pas nécessaire dans l'implémentation render() d'une QSGRenderNode car le graphe de scène effectue implicitement les étapes nécessaires pour les nœuds de rendu.

Voir également beginExternalCommands() et QQuickOpenGLUtils::resetOpenGLState().

[override virtual protected] bool QQuickWindow::event(QEvent *event)

Réimplémente : QWindow::event(QEvent *ev).

[override virtual protected] void QQuickWindow::exposeEvent(QExposeEvent *)

Réimplémente : QWindow::exposeEvent(QExposeEvent *ev).

[override virtual protected] void QQuickWindow::focusInEvent(QFocusEvent *ev)

Réimplémente : QWindow::focusInEvent(QFocusEvent *ev).

[override virtual protected] void QQuickWindow::focusOutEvent(QFocusEvent *ev)

Réimplémente : QWindow::focusOutEvent(QFocusEvent *ev).

[signal] void QQuickWindow::frameSwapped()

Ce signal est émis lorsqu'une image a été mise en file d'attente pour être présentée. Lorsque la synchronisation verticale est activée, le signal est émis au maximum une fois par intervalle vsync dans une scène animée en continu.

Ce signal est émis par le thread de rendu du graphe de scène.

QImage QQuickWindow::grabWindow()

Saisit le contenu de la fenêtre et le renvoie sous forme d'image.

Il est possible d'appeler la fonction grabWindow() lorsque la fenêtre n'est pas visible. Pour cela, il faut que la fenêtre soit created, qu'elle ait une taille valide et qu'aucune autre instance QQuickWindow ne soit en cours de rendu dans le même processus.

Remarque : lorsque cette fenêtre est utilisée en combinaison avec QQuickRenderControl, le résultat de cette fonction est une image vide, sauf si le backend software est utilisé. En effet, lors de la redirection de la sortie vers une ressource graphique gérée par l'application (telle qu'une texture) en utilisant QQuickRenderControl et setRenderTarget(), l'application est mieux adaptée à la gestion et à l'exécution d'une éventuelle opération de relecture, puisqu'elle a le contrôle total de la ressource au départ.

Attention : L'appel à cette fonction entraînera des problèmes de performance.

Attention : Cette fonction ne peut être appelée qu'à partir du thread GUI.

[static, since 6.0] QSGRendererInterface::GraphicsApi QQuickWindow::graphicsApi()

Renvoie l'API graphique qui serait utilisée par le graphe de scène s'il était initialisé à ce moment précis.

La manière standard d'interroger l'API utilisée par le graphe de scène est d'utiliser QSGRendererInterface::graphicsApi() une fois que le graphe de scène a été initialisé, par exemple lorsque ou après que le signal sceneGraphInitialized() a été émis. Dans ce cas, on obtient le vrai résultat, car on sait alors que tout a été initialisé correctement à l'aide de cette API graphique.

Cela n'est pas toujours pratique. Si l'application doit mettre en place des cadres externes ou travailler avec setGraphicsDevice() d'une manière qui dépend de la logique de sélection de l'API intégrée dans le graphe de scène, il n'est pas toujours possible de différer ces opérations jusqu'à ce que QQuickWindow ait été rendu visible ou que QQuickRenderControl::initialize() ait été appelé.

C'est pourquoi cette fonction statique est fournie en contrepartie de setGraphicsApi() : elle peut être appelée à tout moment et le résultat reflète l'API que le graphe de scène choisirait s'il était initialisé au moment de l'appel.

Remarque : cette fonction statique est destinée à être appelée sur le thread principal (GUI) uniquement. Pour interroger l'API lors du rendu, utilisez QSGRendererInterface puisque cet objet vit sur le thread de rendu.

Remarque : cette fonction ne prend pas en compte les backends de graphes de scène.

Cette fonction a été introduite dans Qt 6.0.

Voir aussi setGraphicsApi().

[since 6.0] QQuickGraphicsConfiguration QQuickWindow::graphicsConfiguration() const

Retourne le QQuickGraphicsConfiguration passé à setGraphicsConfiguration(), ou un construit par défaut dans le cas contraire.

Cette fonction a été introduite dans Qt 6.0.

Voir aussi setGraphicsConfiguration().

[since 6.0] QQuickGraphicsDevice QQuickWindow::graphicsDevice() const

Retourne le QQuickGraphicsDevice passé à setGraphicsDevice(), ou un construit par défaut dans le cas contraire

Cette fonction a été introduite dans Qt 6.0.

Voir aussi setGraphicsDevice().

const QQuickWindow::GraphicsStateInfo &QQuickWindow::graphicsStateInfo()

Renvoie une référence à une structure GraphicsStateInfo décrivant l'état interne du RHI, en particulier l'état de la double ou triple mise en mémoire tampon du backend (comme les intégrations Vulkan ou Metal). Ceci est pertinent lorsque les API graphiques sous-jacentes sont Vulkan ou Metal, et que le code de rendu externe souhaite effectuer une double ou triple mise en mémoire tampon de ses propres ressources qui changent souvent, telles que les tampons uniformes, afin d'éviter de bloquer le pipeline.

[static] bool QQuickWindow::hasDefaultAlphaBuffer()

Indique s'il faut utiliser la transparence alpha pour les fenêtres nouvellement créées.

Voir également setDefaultAlphaBuffer().

[override virtual protected] void QQuickWindow::hideEvent(QHideEvent *)

Réimplémente : QWindow::hideEvent(QHideEvent *ev).

QQmlIncubationController *QQuickWindow::incubationController() const

Renvoie un contrôleur d'incubation qui joint l'incubation entre les cadres pour cette fenêtre. QQuickView installe automatiquement ce contrôleur pour vous, sinon vous devrez l'installer vous-même à l'aide de QQmlEngine::setIncubationController().

Le contrôleur appartient à la fenêtre et sera détruit lorsque la fenêtre sera supprimée.

bool QQuickWindow::isPersistentGraphics() const

Retourne si les ressources graphiques essentielles peuvent être libérées pendant la durée de vie du site QQuickWindow.

Remarque : il s'agit d'une indication, et il n'est pas garanti qu'elle soit prise en compte.

Voir également setPersistentGraphics().

bool QQuickWindow::isPersistentSceneGraph() const

Indique si les nœuds et les ressources du graphe de scène peuvent être libérés pendant la durée de vie de cette page QQuickWindow.

Remarque : il s'agit d'une indication. Le moment et la manière dont cela se produit sont spécifiques à l'implémentation.

bool QQuickWindow::isSceneGraphInitialized() const

Retourne true si le graphe de scène a été initialisé, sinon retourne false.

[override virtual protected] void QQuickWindow::keyPressEvent(QKeyEvent *e)

Réimplémente : QWindow::keyPressEvent(QKeyEvent *ev).

[override virtual protected] void QQuickWindow::keyReleaseEvent(QKeyEvent *e)

Réimplémente : QWindow::keyReleaseEvent(QKeyEvent *ev).

[override virtual protected] void QQuickWindow::mouseDoubleClickEvent(QMouseEvent *event)

Réimplémente : QWindow::mouseDoubleClickEvent(QMouseEvent *ev).

[override virtual protected] void QQuickWindow::mouseMoveEvent(QMouseEvent *event)

Réimplémente : QWindow::mouseMoveEvent(QMouseEvent *ev).

[override virtual protected] void QQuickWindow::mousePressEvent(QMouseEvent *event)

Réimplémente : QWindow::mousePressEvent(QMouseEvent *ev).

[override virtual protected] void QQuickWindow::mouseReleaseEvent(QMouseEvent *event)

Réimplémente : QWindow::mouseReleaseEvent(QMouseEvent *ev).

[slot] void QQuickWindow::releaseResources()

Cette fonction tente de libérer les ressources redondantes actuellement détenues par la scène QML.

L'appel de cette fonction demande au graphe de scène de libérer les ressources graphiques mises en cache, telles que les objets du pipeline graphique, les programmes de shaders ou les données d'image.

En outre, en fonction de la boucle de rendu utilisée, cette fonction peut également entraîner la libération du graphe de scène et de toutes les ressources de rendu liées à la fenêtre. Dans ce cas, le signal sceneGraphInvalidated() est émis, ce qui permet aux utilisateurs de nettoyer leurs propres ressources graphiques. Les fonctions setPersistentGraphics() et setPersistentSceneGraph() peuvent être utilisées pour éviter cela, si la gestion du nettoyage n'est pas possible dans l'application, au prix d'une utilisation plus importante de la mémoire.

Remarque : la libération des ressources graphiques mises en cache, telles que les pipelines graphiques ou les programmes de shaders, ne dépend pas des indices de persistance. La libération de ces ressources se fera indépendamment des valeurs des indices de persistance des graphismes et des graphes de scène.

Remarque : cette fonction n'est pas liée à la fonction virtuelle QQuickItem::releaseResources().

Voir également sceneGraphInvalidated(), setPersistentGraphics() et setPersistentSceneGraph().

[since 6.0] QQuickRenderTarget QQuickWindow::renderTarget() const

Retourne le QQuickRenderTarget passé à setRenderTarget(), ou un construit par défaut dans le cas contraire

Cette fonction a été introduite dans Qt 6.0.

Voir aussi setRenderTarget().

QSGRendererInterface *QQuickWindow::rendererInterface() const

Renvoie l'interface de rendu actuelle. La valeur est toujours valide et n'est jamais nulle.

Remarque : cette fonction peut être appelée à tout moment après la construction de QQuickWindow, même si isSceneGraphInitialized() est encore faux. Cependant, certaines fonctions de l'interface de rendu, en particulier QSGRendererInterface::getResource(), ne seront pas fonctionnelles tant que la scène ne sera pas opérationnelle. Les requêtes de backend, comme QSGRendererInterface::graphicsApi() ou QSGRendererInterface::shaderType(), seront toujours fonctionnelles.

Note : Le pointeur retourné reste la propriété de Qt. L'instance renvoyée peut ou non être partagée entre différentes instances de QQuickWindow, en fonction du backend de scène utilisé. Par conséquent, les applications sont censées interroger l'objet d'interface pour chaque QQuickWindow au lieu de réutiliser le pointeur déjà interrogé.

Voir également QSGRenderNode et QSGRendererInterface.

[override virtual protected] void QQuickWindow::resizeEvent(QResizeEvent *ev)

Réimplémente : QWindow::resizeEvent(QResizeEvent *ev).

[since 6.6] QRhi *QQuickWindow::rhi() const

Renvoie l'objet QRhi utilisé par cette fenêtre pour le rendu.

Disponible uniquement lorsque la fenêtre utilise les abstractions de l'API 3D et du langage d'ombrage de Qt, ce qui signifie que le résultat est toujours nul lors de l'utilisation de l'adaptation software.

Le résultat n'est valide que lorsque le rendu a été initialisé, ce qui est indiqué par l'émission du signal sceneGraphInitialized(). Avant cela, la valeur renvoyée est nulle. Dans le cas d'un jeu de scène QQuickWindow ordinaire, l'initialisation se produit généralement lorsque la fenêtre native est exposée (affichée) pour la première fois. Lorsque l'on utilise QQuickRenderControl, l'initialisation est effectuée dans l'appel explicite initialize().

En pratique, cette fonction est un raccourci pour interroger QRhi via QSGRendererInterface.

Cette fonction a été introduite dans Qt 6.6.

[signal] void QQuickWindow::sceneGraphAboutToStop()

Ce signal est émis sur le thread de rendu lorsque le graphe de scène est sur le point d'arrêter le rendu. Cela se produit généralement parce que la fenêtre a été cachée.

Les applications peuvent utiliser ce signal pour libérer des ressources, mais doivent être prêtes à les réintégrer rapidement. Le graphe de scène et le contexte graphique ne sont pas libérés à ce moment-là.

Attention : Ce signal est émis par le thread de rendu du graphe de scène. Si votre fonction slot doit se terminer avant que l'exécution ne se poursuive, vous devez vous assurer que la connexion est directe (voir Qt::ConnectionType).

Attention : Assurez-vous qu'un gestionnaire de signal pour sceneGraphAboutToStop() laisse le contexte graphique dans le même état qu'il était lorsque le gestionnaire de signal a été entré. Dans le cas contraire, le rendu de la scène risque de ne pas être correct.

Voir aussi sceneGraphInvalidated().

[static] QString QQuickWindow::sceneGraphBackend()

Renvoie le backend Qt Quick scenegraph demandé.

Remarque : la valeur de retour de cette fonction peut encore être dépassée par des appels ultérieurs à setSceneGraphBackend() jusqu'à ce que le premier QQuickWindow de l'application ait été construit.

Remarque : La valeur ne reflète la demande dans la variable d'environnement QT_QUICK_BACKEND qu'après la construction de QQuickWindow.

Voir aussi setSceneGraphBackend().

[signal] void QQuickWindow::sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)

Ce signal est émis lorsqu'une erreur error s'est produite lors de l'initialisation du graphe de scène.

Les applications doivent se connecter à ce signal si elles souhaitent gérer les erreurs, comme les échecs de création de contexte graphique, d'une manière personnalisée. Si aucun slot n'est connecté au signal, le comportement sera différent : Quick imprimera le message message, ou affichera une boîte de message, et mettra fin à l'application.

Ce signal sera émis par le thread de l'interface graphique.

[signal] void QQuickWindow::sceneGraphInitialized()

Ce signal est émis lorsque le graphe de scène a été initialisé.

Ce signal sera émis par le thread de rendu du graphe de scène.

[signal] void QQuickWindow::sceneGraphInvalidated()

Ce signal est émis lorsque le graphe de scène a été invalidé.

Ce signal implique que le contexte de rendu graphique utilisé a été invalidé et que toutes les ressources utilisateur liées à ce contexte doivent être libérées.

Lors d'un rendu avec OpenGL, l'adresse QOpenGLContext de cette fenêtre sera liée lorsque cette fonction sera appelée. La seule exception est si l'OpenGL natif a été détruit en dehors du contrôle de Qt, par exemple par EGL_CONTEXT_LOST.

Ce signal sera émis par le thread de rendu du graphe de scène.

void QQuickWindow::scheduleRenderJob(QRunnable *job, QQuickWindow::RenderStage stage)

Planifie l'exécution de job lorsque le rendu de cette fenêtre atteint la valeur donnée stage.

Il s'agit d'une commodité par rapport aux signaux équivalents dans QQuickWindow pour les tâches "ponctuelles".

La fenêtre est propriétaire de job et l'efface lorsque la tâche est terminée.

Si le rendu est arrêté avant que job n'ait eu le temps de s'exécuter, la tâche sera exécutée puis supprimée dans le cadre du nettoyage du graphe de la scène. Si la fenêtre n'est jamais affichée et qu'aucun rendu n'a lieu avant la destruction de QQuickWindow, tous les travaux en attente seront détruits sans que leur méthode run() ne soit appelée.

Si le rendu a lieu dans un autre thread, le job sera exécuté dans le thread de rendu.

Si stage est NoStage, job sera exécuté à la première occasion lorsque le thread de rendu n'est pas occupé à rendre une image. Si la fenêtre n'est pas exposée et ne peut pas être rendue au moment où le travail est affiché ou traité, le travail est supprimé sans que la méthode run() ne soit exécutée. Si un moteur de rendu non threadé est utilisé, la méthode run() du travail est exécutée de manière synchrone. Lors d'un rendu avec OpenGL, le contexte OpenGL est remplacé par le contexte du moteur de rendu avant l'exécution de tout travail, y compris les travaux NoStage.

Remarque : cette fonction ne déclenche pas le rendu ; les travaux ciblant une étape autre que NoStage seront stockés et exécutés jusqu'à ce que le rendu soit déclenché ailleurs. Pour forcer l'exécution du travail plus tôt, appelez QQuickWindow::update() ;

Voir aussi beforeRendering(), afterRendering(), beforeSynchronizing(), afterSynchronizing(), frameSwapped() et sceneGraphInvalidated().

[static] void QQuickWindow::setDefaultAlphaBuffer(bool useAlpha)

useAlpha spécifie s'il faut utiliser la transparence alpha pour les fenêtres nouvellement créées.

Dans toute application qui s'attend à créer des fenêtres translucides, il est nécessaire de fixer cette valeur à true avant de créer la première fenêtre QQuickWindow. La valeur par défaut est false.

Voir également hasDefaultAlphaBuffer().

[static, since 6.0] void QQuickWindow::setGraphicsApi(QSGRendererInterface::GraphicsApi api)

Demande l'adaptation graphique spécifiée api.

Lorsque l'adaptation graphique intégrée par défaut est utilisée, api spécifie l'API graphique (OpenGL, Vulkan, Metal ou Direct3D) que le graphe de scène doit utiliser pour le rendu. En outre, le backend software est également intégré et peut être demandé en définissant api sur QSGRendererInterface::Software.

Contrairement à setSceneGraphBackend(), qui ne peut être utilisé que pour demander un backend donné (intégré ou installé sous forme de plugins chargés dynamiquement), cette fonction fonctionne avec le concept de plus haut niveau des API graphiques. Elle couvre les backends qui sont livrés avec Qt Quick, et qui ont donc des valeurs correspondantes dans l'énumération QSGRendererInterface::GraphicsApi.

Lorsque cette fonction n'est pas appelée et que la variable d'environnement équivalente QSG_RHI_BACKEND n'est pas définie non plus, le graphe de scène choisit l'API graphique à utiliser en fonction de la plateforme.

Cette fonction devient importante dans les applications qui ne sont préparées qu'au rendu avec une API donnée. Par exemple, si l'application effectue un rendu OpenGL ou Vulkan natif, elle voudra s'assurer que Qt Quick effectue également le rendu avec OpenGL ou Vulkan. Ces applications devraient appeler cette fonction au début de leur fonction main().

Remarque : l'appel à cette fonction doit avoir lieu avant la construction du premier site QQuickWindow dans l'application. L'API graphique ne peut pas être modifiée par la suite.

Remarque : lorsqu'elle est utilisée en combinaison avec QQuickRenderControl, cette règle est assouplie : il est possible de modifier l'API graphique, mais uniquement lorsque toutes les instances QQuickRenderControl et QQuickWindow existantes ont été détruites.

Pour demander quelle API graphique le graphe de scène utilise pour le rendu, QSGRendererInterface::graphicsApi() après le graphe de scène has initialized, ce qui se produit généralement lorsque la fenêtre devient visible pour la première fois ou lorsque QQuickRenderControl::initialize() est appelé.

Pour revenir au comportement par défaut, où le graphe de scène choisit une API graphique en fonction de la plate-forme et d'autres conditions, définissez api à QSGRendererInterface::Unknown.

Cette fonction a été introduite dans Qt 6.0.

Voir aussi graphicsApi().

[since 6.0] void QQuickWindow::setGraphicsConfiguration(const QQuickGraphicsConfiguration &config)

Définit la configuration graphique pour cette fenêtre. config contient divers paramètres qui peuvent être pris en compte par le graphe de scène lors de l'initialisation des périphériques et contextes graphiques sous-jacents.

Une telle configuration supplémentaire, spécifiant par exemple quelles extensions de périphériques activer pour Vulkan, devient pertinente et essentielle lors de l'intégration d'un code de rendu graphique natif qui s'appuie sur certaines extensions. Il en va de même lors de l'intégration avec un moteur 3D ou VR externe, tel qu'OpenXR.

Note : La configuration est ignorée lors de l'adoption de périphériques graphiques existants via setGraphicsDevice() puisque le graphe de scène n'est alors pas en contrôle de la construction réelle de ces objets.

QQuickGraphicsConfiguration Les instances sont implicitement partagées, copiables et peuvent être transmises par valeur.

Attention : La définition de QQuickGraphicsConfiguration sur QQuickWindow doit se faire suffisamment tôt, avant que le graphe de scène ne soit initialisé pour la première fois pour cette fenêtre. Avec les fenêtres à l'écran, cela signifie que l'appel doit être fait avant d'invoquer show() sur QQuickWindow ou QQuickView. Avec QQuickRenderControl, la configuration doit être finalisée avant d'appeler initialize().

Cette fonction a été introduite dans Qt 6.0.

Voir aussi graphicsConfiguration().

[since 6.0] void QQuickWindow::setGraphicsDevice(const QQuickGraphicsDevice &device)

Définit les objets de périphérique graphique pour cette fenêtre. Au lieu de créer de nouveaux objets, le scenegraph utilisera les objets existants (device, physical device, etc.) spécifiés par device.

Cette fonction est très souvent utilisée en combinaison avec QQuickRenderControl et setRenderTarget(), afin de rediriger le rendu de Qt Quick dans une texture.

Un QQuickGraphicsDevice construit par défaut ne modifie en rien le comportement par défaut. Une fois qu'un device créé via l'une des fonctions d'usine QQuickGraphicsDevice, telles que QQuickGraphicsDevice::fromDeviceObjects(), est passé, et que le scenegraph utilise une API graphique correspondante (avec l'exemple de fromDeviceObjects(), ce serait Vulkan), le scenegraph utilisera les objets de périphérique existants (tels que VkPhysicalDevice, VkDevice, et l'index de la famille de la file d'attente graphique, dans le cas de Vulkan) encapsulés par QQuickGraphicsDevice. Cela permet d'utiliser le même périphérique et de partager les ressources, telles que les tampons et les textures, entre Qt Quick et les moteurs de rendu natifs.

Attention : Cette fonction ne peut être appelée qu'avant l'initialisation du graphe de scène et n'aura aucun effet si elle est appelée après. En pratique, cela signifie généralement qu'elle doit être appelée juste avant QQuickRenderControl::initialize().

À titre d'exemple, cette fois avec Direct3D, l'utilisation typique devrait être la suivante :

// 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);
...

L'aspect essentiel de l'utilisation de cette fonction est de s'assurer que les ressources ou les handles vers les ressources, tels que texture dans l'exemple ci-dessus, sont visibles et utilisables à la fois par le moteur de rendu externe et par le moteur de rendu de la scène. Il faut pour cela utiliser le même périphérique graphique (ou, avec OpenGL, le contexte OpenGL).

QQuickGraphicsDevice Les instances sont implicitement partagées, copiables et peuvent être transmises par valeur. Elles ne possèdent pas les objets natifs associés (comme l'ID3D11Device dans l'exemple).

Remarque : l'utilisation de QQuickRenderControl n'implique pas toujours l'appel à cette fonction. Lorsque l'adoption d'un périphérique ou d'un contexte existant n'est pas nécessaire, cette fonction ne doit pas être appelée, et le graphe de scène initialisera alors ses propres périphériques et contextes normalement, comme il le ferait avec un écran QQuickWindow.

Cette fonction a été introduite dans Qt 6.0.

Voir aussi graphicsDevice(), QQuickRenderControl, setRenderTarget(), et setGraphicsApi().

void QQuickWindow::setPersistentGraphics(bool persistent)

Définit si les ressources graphiques (périphérique graphique ou contexte, chaîne de permutation, tampons, textures) doivent être préservées et ne peuvent pas être libérées avant la suppression de la dernière fenêtre, à persistent. La valeur par défaut est true.

Lors de l'appel à releaseResources(), ou lorsque la fenêtre est cachée (plus précisément, ne peut être rendue), certaines boucles de rendu ont la possibilité de libérer toutes les ressources graphiques, et pas seulement celles qui sont mises en cache. Cela peut libérer temporairement de la mémoire, mais cela signifie aussi que le moteur de rendu devra réinitialiser complètement les ressources, ce qui peut être coûteux, lorsque la fenêtre devra être rendue à nouveau.

Remarque : les règles qui déterminent quand une fenêtre ne peut pas être rendue sont spécifiques à la plate-forme et au gestionnaire de fenêtres.

Remarque : toutes les ressources graphiques sont libérées lorsque la dernière page QQuickWindow est supprimée, quel que soit ce paramètre.

Remarque : il s'agit d'une indication et il n'est pas garanti qu'elle soit prise en compte.

Remarque : cette indication ne s'applique pas aux ressources mises en cache, qu'il est relativement peu coûteux de supprimer et de recréer par la suite. Par conséquent, l'appel à releaseResources() conduira généralement à libérer ces ressources, quelle que soit la valeur de cette indication.

Voir aussi isPersistentGraphics(), setPersistentSceneGraph(), sceneGraphInitialized(), sceneGraphInvalidated(), et releaseResources().

void QQuickWindow::setPersistentSceneGraph(bool persistent)

Définit si les nœuds et les ressources du graphe de scène sont persistent. Persistant signifie que les nœuds et les ressources ne peuvent pas être libérés. La valeur par défaut est true.

Lors de l'appel à releaseResources(), lorsque la fenêtre est cachée (plus précisément, qu'elle ne peut pas être rendue), certaines boucles de rendu ont la possibilité de libérer les nœuds du graphe de scène et les ressources graphiques correspondantes. Cela libère temporairement de la mémoire, mais signifie également que le graphe de scène devra être reconstruit lors du prochain rendu de la fenêtre.

Remarque : les règles qui déterminent quand une fenêtre ne peut pas être rendue sont spécifiques à la plate-forme et au gestionnaire de fenêtres.

Remarque : les nœuds et les ressources du graphe de scène sont toujours libérés lorsque la dernière page QQuickWindow est supprimée, quel que soit ce paramètre.

Remarque : il s'agit d'une indication, et il n'est pas garanti qu'elle soit prise en compte.

Voir également isPersistentSceneGraph(), setPersistentGraphics(), sceneGraphInvalidated(), sceneGraphInitialized() et releaseResources().

[since 6.0] void QQuickWindow::setRenderTarget(const QQuickRenderTarget &target)

Définit la cible de rendu de cette fenêtre comme étant target.

Une adresse QQuickRenderTarget sert de poignée opaque pour un objet natif pouvant être rendu, le plus souvent une texture 2D, et les métadonnées associées, telles que la taille en pixels.

Un QQuickRenderTarget construit par défaut signifie qu'il n'y a pas de redirection. En revanche, un target valide, créé via l'une des fonctions d'usine statiques QQuickRenderTarget, permet de rediriger le rendu de la scène Qt Quick: il ne ciblera plus les tampons de couleur pour la surface associée à la fenêtre, mais plutôt les textures ou d'autres objets graphiques spécifiés dans target.

Par exemple, en supposant que la scène utilise Vulkan pour effectuer le rendu, on peut rediriger sa sortie dans un VkImage. Pour les API graphiques comme Vulkan, la disposition de l'image doit également être fournie. Les instances QQuickRenderTarget sont implicitement partagées, copiables et peuvent être transmises par valeur. Elles ne possèdent cependant pas les objets natifs associés (comme le VkImage dans l'exemple).

QQuickRenderTarget rt = QQuickRenderTarget::fromVulkanImage(vulkanImage, VK_IMAGE_LAYOUT_PREINITIALIZED, pixelSize);
quickWindow->setRenderTarget(rt);

Cette fonction est très souvent utilisée en combinaison avec QQuickRenderControl et une QQuickWindow invisible, afin de rendre le contenu de Qt Quick dans une texture, sans créer de fenêtre native à l'écran pour cette QQuickWindow.

Lorsque la cible souhaitée ou les données associées, telles que la taille, changent, appelez cette fonction avec un nouveau QQuickRenderTarget. La construction d'instances QQuickRenderTarget et l'appel de cette fonction sont peu coûteux, mais il faut savoir que la définition d'un nouveau target avec un objet natif différent ou d'autres données peut entraîner des étapes d'initialisation potentiellement coûteuses lorsque la scène est sur le point de rendre l'image suivante. Par conséquent, ne modifiez la cible qu'en cas de nécessité.

Remarque : la fenêtre n'est pas propriétaire des objets natifs référencés dans target.

Remarque : Il incombe à l'appelant de s'assurer que les objets natifs référencés dans target sont également valides pour le moteur de rendu de la scène. Par exemple, avec Vulkan, Metal et Direct3D, cela implique que la texture ou l'image est créée sur le même périphérique graphique que celui utilisé en interne par le scenegraph. Par conséquent, lorsque des objets de texture créés sur un périphérique ou un contexte déjà existant sont impliqués, cette fonction est souvent utilisée en combinaison avec setGraphicsDevice().

Remarque : avec les API graphiques, le cas échéant, l'application doit prêter attention aux transitions d'agencement d'image effectuées par le graphe de scène. Par exemple, une fois qu'une image VkImage est associée au graphe de scène par l'appel de cette fonction, sa disposition passera à VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL lors du rendu d'une image.

Attention : Cette fonction ne peut être appelée qu'à partir du thread qui effectue le rendu.

Cette fonction a été introduite dans Qt 6.0.

Voir aussi renderTarget(), QQuickRenderControl, setGraphicsDevice(), et setGraphicsApi().

[static] void QQuickWindow::setSceneGraphBackend(const QString &backend)

Demande une scène Qt Quick backend . Les backends peuvent être intégrés ou installés sous la forme de plugins chargés dynamiquement.

Remarque : l'appel à la fonction doit avoir lieu avant la construction du premier site QQuickWindow dans l'application. Il ne peut pas être modifié par la suite.

Pour plus d'informations sur la liste des backends, voir Passer d'une adaptation à l'autre dans votre application. Si backend n'est pas valide ou si une erreur se produit, la demande est ignorée.

Remarque : appeler cette fonction équivaut à définir les variables d'environnement QT_QUICK_BACKEND ou QMLSCENE_DEVICE. Cependant, cette API est plus sûre à utiliser dans les applications qui génèrent d'autres processus, car il n'est pas nécessaire de se préoccuper de l'héritage de l'environnement.

Voir aussi sceneGraphBackend().

[static] void QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType renderType)

Définit le type de rendu par défaut des éléments de type texte dans Qt Quick à renderType.

Remarque : la définition du type de rendu n'affectera que les éléments créés par la suite ; le type de rendu des éléments existants ne sera pas modifié.

Voir aussi textRenderType().

[override virtual protected] void QQuickWindow::showEvent(QShowEvent *)

Réimplémente : QWindow::showEvent(QShowEvent *ev).

[since 6.6] QRhiSwapChain *QQuickWindow::swapChain() const

Retourne le site QRhiSwapChain utilisé par cette fenêtre, s'il y en a un.

Note : Seules les fenêtres à l'écran soutenues par l'une des boucles de rendu standard (telles que basic ou threaded) auront une chaîne d'échange. Sinon, la valeur retournée est nulle. Par exemple, le résultat est toujours nul lorsque la fenêtre est utilisée avec QQuickRenderControl.

Cette fonction a été introduite dans Qt 6.6.

[override virtual protected] void QQuickWindow::tabletEvent(QTabletEvent *event)

Réimplémente : QWindow::tabletEvent(QTabletEvent *ev).

[static] QQuickWindow::TextRenderType QQuickWindow::textRenderType()

Renvoie le type de rendu des éléments de type texte dans Qt Quick. La valeur par défaut est QQuickWindow::QtTextRendering.

Voir aussi setTextRenderType().

[slot] void QQuickWindow::update()

Planifie le rendu d'une autre image de la fenêtre.

L'appel à QQuickWindow::update() diffère de QQuickItem::update() en ce sens qu'il déclenche toujours un repeint, indépendamment des changements dans le graphe de scène sous-jacent.

[override virtual protected] void QQuickWindow::wheelEvent(QWheelEvent *event)

Réimplémente : 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.