QQuickWindow Class
La clase QQuickWindow proporciona la ventana para mostrar una escena gráfica QML. Más...
| Cabecera: | #include <QQuickWindow> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick)target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| En QML: | Window |
| Hereda de: | QWindow |
| Heredado por: |
Tipos públicos
| 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 } |
Propiedades
|
|
Funciones públicas
| 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 |
Funciones públicas reimplementadas
| virtual QAccessibleInterface * | accessibleRoot() const override |
Ranuras públicas
| void | releaseResources() |
| void | update() |
Señales
| 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() |
Miembros públicos estáticos
(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() |
Funciones protegidas reimplementadas
| 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 |
Descripción Detallada
QQuickWindow proporciona la gestión gráfica de escena necesaria para interactuar y mostrar una escena de QQuickItems.
Una QQuickWindow siempre tiene un único ítem raíz invisible. Para añadir elementos a esta ventana, reparent los elementos al elemento raíz o a un elemento existente en la escena.
Para visualizar fácilmente una escena desde un archivo QML, consulte QQuickView.
Renderización
QQuickWindow utiliza un gráfico de escena para representar lo que necesita ser renderizado. Este gráfico de escena está desconectado de la escena QML y potencialmente vive en otro subproceso, dependiendo de la implementación de la plataforma. Dado que el gráfico de escena de renderización vive independientemente de la escena QML, también puede liberarse completamente sin afectar al estado de la escena QML.
La señal sceneGraphInitialized() se emite en el subproceso de renderizado antes de que la escena QML se renderice en la pantalla por primera vez. Si se ha liberado el gráfico de la escena de renderizado, la señal se emitirá de nuevo antes de que se renderice el siguiente fotograma. Una QQuickWindow visible en pantalla es controlada internamente por un render loop, del que hay múltiples implementaciones proporcionadas en el gráfico de escena. Para más detalles sobre el proceso de renderizado del gráfico de escena, ver Qt Quick Scene Graph.
Por defecto, una QQuickWindow renderiza usando una API de gráficos 3D acelerada, como OpenGL o Vulkan. Consulte Adaptaciones de gráficos de escena para obtener una descripción detallada de los backends de gráficos de escena y las API de gráficos compatibles.
Advertencia: Es crucial que las operaciones gráficas y la interacción con el gráfico de escena ocurran exclusivamente en el hilo de renderizado, principalmente durante la fase updatePaintNode().
Atención: Dado que muchas de las señales relacionadas con el renderizado se emiten desde el hilo de renderizado, las conexiones deben realizarse utilizando Qt::DirectConnection.
Integración con APIs de gráficos 3D acelerados
Es posible integrar llamadas a OpenGL, Vulkan, Metal o Direct3D 11 directamente en QQuickWindow, siempre y cuando QQuickWindow y el gráfico de escena subyacente estén renderizando utilizando la misma API. Para acceder a objetos gráficos nativos, como manejadores de dispositivos u objetos de contexto, utiliza QSGRendererInterface. Una instancia de QSGRendererInterface es consultable desde QQuickWindow llamando a rendererInterface(). Los habilitadores de esta integración son beforeRendering(), beforeRenderPassRecording(), afterRenderPassRecording() y las señales relacionadas. Éstas permiten la representación de capas base o superpuestas. Alternativamente, QNativeInterface::QSGOpenGLTexture, QNativeInterface::QSGVulkanTexture, y otras clases similares permiten envolver una textura nativa existente o un objeto de imagen en un QSGTexture que luego puede ser utilizado con el gráfico de escena.
Renderizado sin aceleración
También se dispone de una ruta de renderizado limitada, basada exclusivamente en software. Con el backend software, varias funciones de Qt Quick no están disponibles, por lo que los elementos QML que dependan de ellas no se renderizarán en absoluto. Al mismo tiempo, esto permite que QQuickWindow sea funcional incluso en sistemas donde no hay ninguna API de gráficos 3D disponible. Consulte Qt Quick Software Adaptation para obtener más detalles.
Renderizado Redirigido
Una QQuickWindow no está necesariamente respaldada por una ventana nativa en pantalla. El renderizado puede ser redirigido a un objetivo de renderizado personalizado, como una textura nativa dada. Esto se logra en combinación con la clase QQuickRenderControl, y funciones como setRenderTarget(), setGraphicsDevice(), y setGraphicsConfiguration().
En este caso, QQuickWindow representa la escena, y proporciona la infraestructura para renderizar un frame. No estará respaldado por un bucle de renderizado y una ventana nativa. En su lugar, en este caso la aplicación maneja el renderizado, sustituyendo efectivamente a los bucles de renderizado. Esto permite generar secuencias de imágenes, renderizar en texturas para su uso en motores 3D externos, o renderizar contenidos Qt Quick dentro de un entorno VR.
Gestión de recursos
QML intentará almacenar en caché las imágenes y los nodos del gráfico de escena para mejorar el rendimiento, pero en algunos escenarios de poca memoria puede ser necesario liberar agresivamente estos recursos. La función releaseResources() se puede utilizar para forzar la limpieza de ciertos recursos, especialmente los recursos que se almacenan en caché y se pueden volver a crear más tarde cuando se necesiten de nuevo.
Además, llamar a releaseResources() puede resultar en la liberación de todo el gráfico de la escena y los recursos gráficos asociados. La señal sceneGraphInvalidated() se emitirá cuando esto ocurra. Este comportamiento está controlado por las funciones setPersistentGraphics() y setPersistentSceneGraph().
Nota: Todas las clases con el prefijo QSG deben utilizarse únicamente en el subproceso de renderizado del gráfico de escena. Ver Gráfico de Escena y Renderizado para más información.
Exposición y Visibilidad
Cuando una instancia de QQuickWindow es deliberadamente ocultada con hide() o setVisible(false), dejará de renderizarse y su gráfico de escena y contexto gráfico podrían ser liberados también. Esto depende de los ajustes configurados por setPersistentGraphics() y setPersistentSceneGraph(). El comportamiento a este respecto es idéntico al de llamar explícitamente a la función releaseResources(). Una ventana puede quedar no expuesta, es decir, no renderizable, también por otros medios. Esto depende de la plataforma y del sistema de ventanas. Por ejemplo, en Windows minimizar una ventana hace que deje de renderizarse. En macOS, oscurecer completamente una ventana con otras ventanas encima provoca lo mismo. En Linux/X11, el comportamiento depende del gestor de ventanas.
Contexto OpenGL y formatos de superficie
Aunque es posible especificar un QSurfaceFormat para cada QQuickWindow llamando a la función miembro setFormat(), las ventanas también pueden crearse desde QML utilizando los elementos Window y ApplicationWindow. En este caso no hay código C++ implicado en la creación de la instancia de la ventana, aunque las aplicaciones pueden desear establecer ciertos valores de formato de superficie, por ejemplo para solicitar una versión o perfil OpenGL determinado. Tales aplicaciones pueden llamar a la función estática QSurfaceFormat::setDefaultFormat() al inicio. El formato especificado se utilizará para todas las ventanas Quick creadas posteriormente.
Instancia Vulkan
Cuando se utiliza Vulkan, una QQuickWindow se asocia automáticamente con un QVulkanInstance que es creado y gestionado internamente por el gráfico de escena. De esta manera la mayoría de las aplicaciones no necesitan preocuparse por tener un VkInstance disponible ya que todo sucede automáticamente. En casos avanzados una aplicación puede desear crear su propio QVulkanInstance, para configurarlo de una manera específica. Esto también es posible. Llamar a setVulkanInstance() en el QQuickWindow justo después de la construcción, antes de hacerlo visible, lleva a usar el QVulkanInstance proporcionado por la aplicación (y el VkInstance subyacente). Cuando se redirecciona a través de QQuickRenderControl, no se proporciona QVulkanInstance automáticamente, sino que se espera que la aplicación proporcione el suyo propio y lo asocie con el QQuickWindow.
Contextos gráficos y dispositivos
Cuando se inicializa el gráfico de escena, lo que suele ocurrir cuando la ventana se expone o, en caso de renderizado redirigido, la inicialización se realiza via QQuickRenderControl, los objetos de contexto o dispositivo necesarios para el renderizado se crean automáticamente. Esto incluye contextos OpenGL, dispositivos Direct3D y contextos de dispositivo, dispositivos Vulkan y Metal. El código de la aplicación también puede consultarlos posteriormente a través de QSGRendererInterface. Cuando se utiliza el bucle de renderizado basic, que realiza todo el renderizado en el hilo GUI, se utiliza el mismo contexto o dispositivo con todas las QQuickWindows visibles. El bucle de renderizado threaded utiliza un contexto o dispositivo dedicado para cada hilo de renderizado, y así para cada QQuickWindow. Con algunas APIs gráficas, hay un grado de personalización proporcionado a través de setGraphicsConfiguration(). Esto hace posible, por ejemplo, especificar la lista de extensiones Vulkan a habilitar en VkDevice. Alternativamente, también es posible proporcionar un conjunto de objetos de contexto o dispositivo existentes para su uso por QQuickWindow, en lugar de dejar que construya el suyo propio. Esto se consigue a través de setGraphicsDevice().
Ver también QQuickView, QQuickRenderControl, QQuickRenderTarget, QQuickGraphicsDevice, QQuickGraphicsConfiguration, y QSGRendererInterface.
Documentación de tipos de miembros
enum QQuickWindow::CreateTextureOption
flags QQuickWindow::CreateTextureOptions
Los enums CreateTextureOption se utilizan para personalizar una textura se envuelve.
| Constante | Valor | Descripción |
|---|---|---|
QQuickWindow::TextureHasAlphaChannel | 0x0001 | La textura tiene un canal alfa y debe ser dibujada usando mezcla. |
QQuickWindow::TextureHasMipmaps | 0x0002 | La textura tiene mipmaps y puede ser dibujada con mipmapping habilitado. |
QQuickWindow::TextureOwnsGLTexture | 0x0004 | A partir de Qt 6.0, esta bandera no se utiliza en la práctica y se ignora. La propiedad de los recursos gráficos nativos no es transferible al envoltorio QSGTexture, porque Qt Quick puede no tener los detalles necesarios sobre cómo debe liberarse un objeto de este tipo y la memoria asociada. |
QQuickWindow::TextureCanUseAtlas | 0x0008 | La imagen puede cargarse en un atlas de textura. |
QQuickWindow::TextureIsOpaque | 0x0010 | La textura devolverá false para QSGTexture::hasAlphaChannel() y no será mezclada. Esta bandera se añadió en Qt 5.6. |
El tipo CreateTextureOptions es un typedef para QFlags<CreateTextureOption>. Almacena una combinación OR de valores CreateTextureOption.
enum QQuickWindow::RenderStage
| Constante | Valor | Descripción |
|---|---|---|
QQuickWindow::BeforeSynchronizingStage | 0 | Antes de la sincronización. |
QQuickWindow::AfterSynchronizingStage | 1 | Después de la sincronización. |
QQuickWindow::BeforeRenderingStage | 2 | Antes de la renderización. |
QQuickWindow::AfterRenderingStage | 3 | Después de la renderización. |
QQuickWindow::AfterSwapStage | 4 | Después del intercambio de fotogramas. |
QQuickWindow::NoStage | 5 | Tan pronto como sea posible. Este valor se añadió en Qt 5.6. |
Ver también Gráfico de escena y Renderizado.
enum QQuickWindow::SceneGraphError
Este enum describe el error en una señal sceneGraphError().
| Constante | Valor | Descripción |
|---|---|---|
QQuickWindow::ContextNotAvailable | 1 | La creación del contexto gráfico ha fallado. Esto típicamente significa que no se encontró una implementación OpenGL adecuada, por ejemplo porque no hay controladores gráficos instalados y por lo tanto no hay soporte OpenGL 2 presente. En placas móviles y embebidas que usan OpenGL ES es probable que este error indique problemas en la integración del sistema de ventanas y posiblemente una configuración incorrecta de Qt. |
enum QQuickWindow::TextRenderType
Este enum describe el tipo de renderizado por defecto de los elementos tipo texto en Qt Quick (Text, TextInput, etc.).
Seleccione NativeTextRendering si prefiere que el texto tenga un aspecto nativo en la plataforma de destino y no necesita funciones avanzadas como la transformación del texto. El uso de tales características en combinación con el tipo de renderizado NativeTextRendering dará resultados pobres y a veces pixelados.
Tanto QtTextRendering como CurveTextRendering son técnicas aceleradas por hardware. QtTextRendering es la más rápida de las dos, pero utiliza más memoria y mostrará artefactos de renderizado en tamaños grandes. CurveTextRendering debería considerarse una alternativa en los casos en los que QtTextRendering no ofrezca buenos resultados visuales o en los que reducir el consumo de memoria gráfica sea una prioridad.
| Constante | Valor | Descripción |
|---|---|---|
QQuickWindow::QtTextRendering | 0 | Utiliza el algoritmo de rasterización propio de Qt. |
QQuickWindow::NativeTextRendering | 1 | Utiliza el rasterizador nativo del sistema operativo para el texto. |
QQuickWindow::CurveTextRendering | 2 | El texto se renderiza usando un rasterizador de curvas que se ejecuta directamente en el hardware gráfico. (Introducido en Qt 6.7.0.) |
Documentación de propiedades
[read-only] activeFocusItem : QQuickItem*
Esta propiedad contiene el elemento que tiene actualmente el foco activo o null si no hay ningún elemento con foco activo.
Funciones de acceso:
| QQuickItem * | activeFocusItem() const |
Señal del notificador:
| void | activeFocusItemChanged() |
Véase también QQuickItem::forceActiveFocus() y Keyboard Focus en Qt Quick.
color : QColor
Esta propiedad contiene el color utilizado para borrar el búfer de color al principio de cada fotograma.
Por defecto, el color de borrado es el blanco.
Funciones de acceso:
| QColor | color() const |
| void | setColor(const QColor &color) |
Señal notificadora:
| void | colorChanged(const QColor &) |
Véase también setDefaultAlphaBuffer().
[read-only] contentItem : QQuickItem* const
Esta propiedad contiene el elemento raíz invisible de la escena.
Un sitio QQuickWindow siempre tiene un único elemento raíz invisible que contiene todo su contenido. Para añadir elementos a esta ventana, reparent los elementos al contentItem o a un elemento existente en la escena.
Funciones de acceso:
| QQuickItem * | contentItem() const |
[read-only, since 6.11] devicePixelRatio : qreal
Devuelve la proporción entre píxeles físicos y píxeles independientes del dispositivo para la ventana. Este valor depende de la pantalla en la que se encuentre la ventana, y puede cambiar al mover la ventana.
Esta propiedad se introdujo en Qt 6.11.
Funciones de acceso:
| qreal | effectiveDevicePixelRatio() const |
Señal del notificador:
| void | devicePixelRatioChanged() |
transientParent : QWindow*
Esta propiedad contiene la ventana para la cual esta ventana es una ventana emergente transitoria.
Es una pista para el gestor de ventanas de que esta ventana es un diálogo o ventana emergente en nombre del padre transitorio, que puede ser cualquier tipo de QWindow.
Para que la ventana esté centrada por encima de su padre transitorio por defecto, dependiendo del gestor de ventanas, también puede ser necesario establecer la propiedad flags con un Qt::WindowType adecuado (como Qt::Dialog).
Véase también parent().
Documentación de las funciones miembro
[explicit] QQuickWindow::QQuickWindow(QQuickRenderControl *control)
Construye una ventana para mostrar una escena QML, cuya renderización será controlada por el objeto control. Consulte la documentación de QQuickRenderControl para obtener más información.
[explicit] QQuickWindow::QQuickWindow(QWindow *parent = nullptr)
Construye una ventana para mostrar una escena QML con la ventana padre parent.
[override virtual noexcept] QQuickWindow::~QQuickWindow()
Destruye la ventana.
[override virtual] QAccessibleInterface *QQuickWindow::accessibleRoot() const
Devuelve una interfaz de accesibilidad para esta ventana, o 0 si no se puede crear dicha interfaz.
[signal] void QQuickWindow::afterAnimating()
Esta señal se emite en el subproceso GUI antes de solicitar al subproceso de renderizado que realice la sincronización del gráfico de la escena.
A diferencia de otras señales similares, ésta se emite en el subproceso GUI en lugar de en el subproceso de renderizado. Puede utilizarse para sincronizar sistemas de animación externos con el contenido QML. Al mismo tiempo, esto significa que esta señal no es adecuada para activar operaciones gráficas.
[signal, since 6.0] void QQuickWindow::afterFrameEnd()
Esta señal se emite cuando el gráfico de escena ha enviado un fotograma. Se emite después de todas las demás señales relacionadas, como afterRendering(). Es la última señal que emite el subproceso de renderizado del gráfico de escena al renderizar un fotograma.
Nota: A diferencia de frameSwapped(), se garantiza que esta señal también se emite cuando la salida de Qt Quick se redirige a través de QQuickRenderControl.
Advertencia: Esta señal se emite desde el subproceso de renderizado del gráfico de escena. Si tu función slot necesita terminar antes de que la ejecución continúe, debes asegurarte de que la conexión es directa (ver Qt::ConnectionType).
Esta función se introdujo en Qt 6.0.
Véase también beforeFrameBegin() y rendererInterface().
[signal] void QQuickWindow::afterRenderPassRecording()
Esta señal se emite después de que el scenegraph haya grabado los comandos para su pase de renderizado principal, pero el pase aún no ha finalizado en el buffer de comandos.
Esta señal se emite antes que afterRendering(), y garantiza que no sólo el fotograma sino también la grabación del pase de renderizado principal del scenegraph siguen activos. Esto permite insertar comandos sin tener que generar un pase de renderizado completo por separado (que normalmente borraría las imágenes adjuntas). Los objetos gráficos nativos pueden consultarse a través de QSGRendererInterface.
Nota: Las actualizaciones de recursos (cargas, copias) normalmente no pueden ponerse en cola desde un pase de renderizado. Por lo tanto, un renderizado de usuario más complejo necesitará conectarse tanto a beforeRendering() como a esta señal.
Advertencia: Esta señal se emite desde el hilo de renderizado del gráfico de escena. Si tu función de slot necesita terminar antes de que la ejecución continúe, debes asegurarte de que la conexión es directa (ver Qt::ConnectionType).
Véase también rendererInterface() y Gráfico de escena - RHI bajo QML.
[signal] void QQuickWindow::afterRendering()
La señal se emite después de que el gráfico de escena haya añadido sus comandos al búfer de comandos, que aún no se ha enviado a la cola de gráficos. Si se desea, la función de ranura conectada a esta señal puede consultar recursos nativos, como el búfer de comandos, antes a través de QSGRendererInterface. Nótese, sin embargo, que el pase (o pases) de renderizado ya están grabados en este punto y no es posible añadir más comandos dentro del pase del scenegraph. En su lugar, utilice afterRenderPassRecording() para ello. Por lo tanto, esta señal tiene un uso limitado en Qt 6, a diferencia de Qt 5. Más bien, es la combinación de beforeRendering() y beforeRenderPassRecording(), o beforeRendering() y afterRenderPassRecording(), lo que se utiliza normalmente para lograr la sub- o superposición del renderizado personalizado.
Advertencia: Esta señal se emite desde el hilo de renderizado del gráfico de escena. Si tu función slot necesita terminar antes de que la ejecución continúe, debes asegurarte de que la conexión es directa (ver Qt::ConnectionType).
Nota: Cuando utilices OpenGL, ten en cuenta que establecer estados específicos de OpenGL 3.x o 4.x y dejarlos activados o establecidos en valores no predeterminados al volver de la ranura conectada puede interferir con el renderizado del gráfico de escena. El QOpenGLContext utilizado para el renderizado por el gráfico de escena se vinculará cuando se emita la señal.
Véase también rendererInterface(), Gráfico de escena - RHI bajo QML, Gráfico de escena - OpenGL bajo QML, Gráfico de escena - Metal bajo QML, Gráfico de escena - Vulkan bajo QML y Gráfico de escena - Direct3D 11 bajo QML.
[signal] void QQuickWindow::afterSynchronizing()
Esta señal se emite después de sincronizar el gráfico de escena con el estado QML.
Esta señal se puede utilizar para hacer la preparación necesaria después de las llamadas a QQuickItem::updatePaintNode(), mientras que el hilo GUI está todavía bloqueado.
Cuando se utiliza OpenGL, el QOpenGLContext utilizado para el renderizado por el gráfico de escena se vinculará en este punto.
Advertencia: Esta señal se emite desde el hilo de renderizado del gráfico de escena. Si tu función de slot necesita terminar antes de que la ejecución continúe, debes asegurarte de que la conexión es directa (ver Qt::ConnectionType).
Advertencia: Cuando utilices OpenGL, ten en cuenta que establecer estados específicos de OpenGL 3.x o 4.x y dejarlos activados o establecidos en valores no predeterminados al volver de la ranura conectada puede interferir con el renderizado del gráfico de escena.
[signal, since 6.0] void QQuickWindow::beforeFrameBegin()
Esta señal se emite antes de que el gráfico de escena comience a preparar el fotograma. Precede a señales como beforeSynchronizing() o beforeRendering(). Es la primera señal que emite el subproceso de renderizado del gráfico de escena cuando comienza a preparar un nuevo fotograma.
Esta señal es relevante para frameworks gráficos de bajo nivel que necesitan ejecutar ciertas operaciones, como la limpieza de recursos, en una etapa en la que Qt Quick no ha iniciado la grabación de un nuevo frame a través de las APIs de interfaz del hardware de renderizado subyacente.
Advertencia: Esta señal se emite desde el hilo de renderizado del gráfico de escena. Si tu función de slot necesita terminar antes de que la ejecución continúe, debes asegurarte de que la conexión es directa (ver Qt::ConnectionType).
Esta función se introdujo en Qt 6.0.
Véase también afterFrameEnd() y rendererInterface().
[signal] void QQuickWindow::beforeRenderPassRecording()
Esta señal se emite antes de que el scenegraph comience a grabar comandos para el pase de render principal. (Las capas tienen sus propios pases y están completamente grabadas para cuando se emite esta señal). El pase de renderizado ya está activo en el buffer de comandos cuando se emite la señal.
Esta señal se emite más tarde que beforeRendering() y garantiza que no sólo está activo el fotograma, sino también la grabación del pase de renderizado principal del scenegraph. Esto permite insertar comandos sin tener que generar un pase de renderizado completo por separado (que normalmente borraría las imágenes adjuntas). Los objetos gráficos nativos pueden consultarse a través de QSGRendererInterface.
Nota: Las actualizaciones de recursos (cargas, copias) normalmente no pueden ponerse en cola desde un pase de renderizado. Por lo tanto, un renderizado de usuario más complejo necesitará conectarse tanto a beforeRendering() como a esta señal.
Advertencia: Esta señal se emite desde el hilo de renderizado del gráfico de escena. Si tu función de slot necesita terminar antes de que la ejecución continúe, debes asegurarte de que la conexión es directa (ver Qt::ConnectionType).
Véase también rendererInterface() y Scene Graph - RHI Under QML.
[signal] void QQuickWindow::beforeRendering()
Esta señal se emite después de que se hayan realizado los preparativos para la trama, lo que significa que hay un búfer de comandos en modo de grabación, en su caso. Si se desea, la función de slot conectada a esta señal puede consultar recursos nativos como el comando anterior a través de QSGRendererInterface. Tenga en cuenta, sin embargo, que la grabación del pase de renderizado principal aún no se ha iniciado en este punto y no es posible añadir comandos dentro de ese pase. Iniciar un pase significa borrar los buffers de color, profundidad y stencil, por lo que no es posible conseguir un renderizado de tipo underlay simplemente conectándose a esta señal. En su lugar, conéctese a beforeRenderPassRecording(). Sin embargo, la conexión a esta señal sigue siendo importante si se desea la grabación de comandos de tipo copia, ya que éstos no se pueden poner en cola dentro de un pase de renderizado.
Advertencia: Esta señal se emite desde el hilo de renderizado del gráfico de escena. Si su función de slot necesita terminar antes de que la ejecución continúe, debe asegurarse de que la conexión es directa (ver Qt::ConnectionType).
Nota: Cuando utilices OpenGL, ten en cuenta que establecer estados específicos de OpenGL 3.x o 4.x y dejarlos activados o establecidos en valores no predeterminados al volver de la ranura conectada puede interferir con el renderizado del gráfico de escena. El QOpenGLContext utilizado para el renderizado por el gráfico de escena se vinculará cuando se emita la señal.
Véase también rendererInterface(), Gráfico de escena - RHI bajo QML, Gráfico de escena - OpenGL bajo QML, Gráfico de escena - Metal bajo QML, Gráfico de escena - Vulkan bajo QML y Gráfico de escena - Direct3D 11 bajo QML.
[signal] void QQuickWindow::beforeSynchronizing()
Esta señal se emite antes de que el gráfico de escena se sincronice con el estado QML.
Aunque la señal se emite desde el subproceso de renderización del gráfico de la escena, se garantiza que el subproceso de la interfaz gráfica de usuario está bloqueado, al igual que en QQuickItem::updatePaintNode(). Por lo tanto, es seguro acceder a los datos del subproceso GUI en una ranura o lambda que esté conectada con Qt::DirectConnection.
Esta señal puede utilizarse para realizar cualquier preparación necesaria antes de llamar a QQuickItem::updatePaintNode().
Cuando se utiliza OpenGL, el QOpenGLContext utilizado para el renderizado por el gráfico de escena se vinculará en este punto.
Advertencia: Esta señal se emite desde el hilo de renderizado del gráfico de escena. Si tu función de slot necesita terminar antes de que la ejecución continúe, debes asegurarte de que la conexión es directa (ver Qt::ConnectionType).
Advertencia: Cuando utilices OpenGL, ten en cuenta que establecer estados específicos de OpenGL 3.x o 4.x y dejarlos activados o establecidos en valores no predeterminados al volver de la ranura conectada puede interferir con el renderizado del gráfico de escena.
void QQuickWindow::beginExternalCommands()
Cuando se mezclan comandos de gráficos sin procesar (OpenGL, Vulkan, Metal, etc.) con el renderizado del gráfico de escena, es necesario llamar a esta función antes de grabar los comandos en el búfer de comandos utilizado por el gráfico de escena para renderizar su pase de renderizado principal. Esto es para evitar el estado de clobbering.
En la práctica, esta función se llama a menudo desde una ranura conectada a las señales beforeRenderPassRecording() o afterRenderPassRecording().
La función no necesita ser llamada cuando se graban comandos en el propio buffer de comandos de la aplicación (por ejemplo, un VkCommandBuffer o MTLCommandBuffer + MTLRenderCommandEncoder creado y gestionado por la aplicación, no recuperado del gráfico de escena). Con APIs gráficas en las que no se expone el concepto de buffer de comandos nativo (OpenGL, Direct 3D 11), beginExternalCommands() y endExternalCommands() juntos proporcionan un reemplazo para la función resetOpenGLState() de Qt 5.
Llamar a esta función y a endExternalCommands() no es necesario dentro de la implementación de render() de un QSGRenderNode porque el gráfico de escena realiza los pasos necesarios implícitamente para los nodos de render.
Los objetos gráficos nativos (como, dispositivo gráfico, buffer de comandos o codificador) son accesibles a través de QSGRendererInterface::getResource().
Atención: Cuidado con el hecho de que QSGRendererInterface::CommandListResource puede devolver un objeto diferente entre beginExternalCommands() - endExternalCommands(). Esto puede ocurrir cuando la implementación subyacente proporciona un buffer de comandos secundario dedicado para grabar comandos gráficos externos dentro de un pase de renderizado. Por lo tanto, consulte siempre CommandListResource después de llamar a esta función. No intente reutilizar un objeto de una consulta anterior.
Nota: Cuando el scenegraph está utilizando OpenGL, preste atención al hecho de que el estado de OpenGL en el contexto puede tener configuraciones arbitrarias, y esta función no realiza ningún restablecimiento del estado a los valores predeterminados.
Véase también endExternalCommands() y QQuickOpenGLUtils::resetOpenGLState().
[override virtual protected] void QQuickWindow::closeEvent(QCloseEvent *e)
Reimplementa: QWindow::closeEvent(QCloseEvent *ev).
QSGImageNode *QQuickWindow::createImageNode() const
Crea un nodo de imagen simple. Cuando el scenegraph no está inicializado, el valor de retorno es null.
Se trata de una alternativa cruzada a la construcción directa de QSGSimpleTextureNode.
Véase también QSGImageNode.
QSGNinePatchNode *QQuickWindow::createNinePatchNode() const
Crea un nodo de nueve parches. Cuando el escenario no está inicializado, el valor devuelto es null.
QSGRectangleNode *QQuickWindow::createRectangleNode() const
Crea un nodo rectángulo simple. Cuando el scenegraph no está inicializado, el valor de retorno es null.
Se trata de una alternativa cruzada a la construcción directa de QSGSimpleRectNode.
Véase también QSGRectangleNode.
[since 6.7] QSGTextNode *QQuickWindow::createTextNode() const
Crea un nodo de texto. Cuando el scenegraph no está inicializado, el valor de retorno es null.
Esta función se introdujo en Qt 6.7.
Véase también QSGTextNode.
QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image, QQuickWindow::CreateTextureOptions options) const
Crea un nuevo QSGTexture a partir del image suministrado. Si la imagen tiene un canal alfa, la textura correspondiente tendrá un canal alfa.
La persona que llama a la función es responsable de borrar la textura devuelta. El objeto de textura nativo subyacente se destruye junto con QSGTexture.
Cuando options contiene TextureCanUseAtlas, el motor puede colocar la imagen en un atlas de texturas. Las texturas en un atlas necesitan depender de QSGTexture::normalizedTextureSubRect() para su geometría y no soportarán QSGTexture::Repeat. Otros valores de CreateTextureOption son ignorados.
Cuando options contiene TextureIsOpaque, el motor creará una textura RGB que devuelve false para QSGTexture::hasAlphaChannel(). Las texturas opacas serán en la mayoría de los casos más rápidas de renderizar. Cuando esta bandera no está activada, la textura tendrá un canal alfa basado en el formato de la imagen.
Cuando options contiene TextureHasMipmaps, el motor creará una textura que puede utilizar el filtrado mipmap. Las texturas mipmapped no pueden estar en un atlas.
Establecer TextureHasAlphaChannel en options no sirve de nada para esta función, ya que asumir un canal alfa y la mezcla es el valor predeterminado. Para evitarlo, defina TextureIsOpaque.
Cuando el gráfico de escena utiliza OpenGL, la textura devuelta utilizará GL_TEXTURE_2D como destino de textura y GL_RGBA como formato interno. Con otras APIs gráficas, el formato de textura es normalmente RGBA8. Reimplemente QSGTexture para crear texturas con parámetros diferentes.
Advertencia: Esta función devolverá 0 si el gráfico de la escena aún no ha sido inicializado.
Advertencia: La textura devuelta no es gestionada por el grafo de escena y debe ser borrada explícitamente por quien la llama en el hilo de renderizado. Esto se consigue borrando la textura desde un destructor de QSGNode o utilizando deleteLater() en el caso de que la textura ya tenga afinidad con el hilo de renderizado.
Esta función puede ser llamada tanto desde el hilo principal como desde el hilo de renderizado.
Ver también sceneGraphInitialized() y QSGTexture.
QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image) const
Se trata de una función sobrecargada.
[since 6.6] QSGTexture *QQuickWindow::createTextureFromRhiTexture(QRhiTexture *texture, QQuickWindow::CreateTextureOptions options = {}) const
Crea un nuevo QSGTexture a partir del texture suministrado.
Utilice options para personalizar los atributos de textura. Esta función sólo tiene en cuenta la bandera TextureHasAlphaChannel. Cuando se establece, el renderizador de gráficos de escena siempre trata el QSGTexture resultante como si necesitara mezcla. Para las texturas que son totalmente opacas, no establecer la bandera puede ahorrar el coste de realizar la mezcla alfa durante el renderizado. La bandera no tiene correspondencia directa con el format del QRhiTexture, es decir, no fijar la bandera teniendo un formato de textura como el comúnmente utilizado QRhiTexture::RGBA8 es perfectamente normal.
El mipmapping no está controlado por options ya que texture ya está creado y tiene incorporada la presencia o ausencia de mipmaps.
El QSGTexture devuelto es el propietario de QRhiTexture, lo que significa que texture se destruye junto con el QSGTexture devuelto.
Si texture posee sus recursos gráficos nativos subyacentes (objeto de textura OpenGL, imagen Vulkan, etc.), eso depende de cómo fue creado QRhiTexture (QRhiTexture::create() o QRhiTexture::createFrom()), y eso no es controlado o cambiado por esta función.
Nota: Esto sólo es funcional cuando el gráfico de escena ya se ha inicializado y está utilizando la adaptación por defecto, basada en QRhi. En caso contrario, el valor devuelto es nullptr.
Nota: Esta función sólo puede ser llamada en el subproceso de renderizado del gráfico de escena.
Esta función se introdujo en Qt 6.6.
Véase también createTextureFromImage(), sceneGraphInitialized(), y QSGTexture.
[signal, since 6.11] void QQuickWindow::devicePixelRatioChanged()
Esta señal se emite cuando se ha modificado la proporción efectiva de píxeles del dispositivo.
Nota: Señal notificadora para la propiedad devicePixelRatio.
Esta función se introdujo en Qt 6.11.
Véase también effectiveDevicePixelRatio().
qreal QQuickWindow::effectiveDevicePixelRatio() const
Devuelve la proporción de píxeles del dispositivo para esta ventana.
Esto es diferente de QWindow::devicePixelRatio() en que soporta el renderizado redirigido a través de QQuickRenderControl y QQuickRenderTarget. Cuando se utiliza un QQuickRenderControl, el QQuickWindow a menudo no se crea completamente, lo que significa que nunca se muestra y no hay una ventana nativa subyacente creada en el sistema de ventanas. Como resultado, la consulta de propiedades como la proporción de píxeles del dispositivo no puede dar resultados correctos. Esta función tiene en cuenta tanto QQuickRenderControl::renderWindowFor() como QQuickRenderTarget::devicePixelRatio(). Cuando no hay redirección, el resultado es el mismo que QWindow::devicePixelRatio().
Nota: Función Getter para la propiedad devicePixelRatio.
Véase también QQuickRenderControl, QQuickRenderTarget, setRenderTarget(), y QWindow::devicePixelRatio().
void QQuickWindow::endExternalCommands()
Cuando se mezclan comandos de gráficos sin procesar (OpenGL, Vulkan, Metal, etc.) con el renderizado de gráficos de escena, es necesario llamar a esta función después de grabar comandos en el búfer de comandos utilizado por el gráfico de escena para renderizar su pase de renderizado principal. Esto es para evitar el estado de clobbering.
En la práctica, esta función se llama a menudo desde una ranura conectada a las señales beforeRenderPassRecording() o afterRenderPassRecording().
La función no necesita ser llamada cuando se graban comandos en el propio buffer de comandos de la aplicación (por ejemplo, un VkCommandBuffer o MTLCommandBuffer + MTLRenderCommandEncoder creado y gestionado por la aplicación, no recuperado del gráfico de escena). Con las API de gráficos en las que no se expone el concepto de búfer de comandos nativo (OpenGL, Direct 3D 11), beginExternalCommands() y endExternalCommands() proporcionan conjuntamente un sustituto de la función resetOpenGLState() de Qt 5.
Llamar a esta función y a beginExternalCommands() no es necesario dentro de la implementación de render() de un QSGRenderNode porque el gráfico de escena realiza los pasos necesarios implícitamente para los nodos de render.
Véase también beginExternalCommands() y QQuickOpenGLUtils::resetOpenGLState().
[override virtual protected] bool QQuickWindow::event(QEvent *event)
Reimplementa: QWindow::event(QEvent *ev).
[override virtual protected] void QQuickWindow::exposeEvent(QExposeEvent *)
Reimplementa: QWindow::exposeEvent(QExposeEvent *ev).
[override virtual protected] void QQuickWindow::focusInEvent(QFocusEvent *ev)
Reimplementa: QWindow::focusInEvent(QFocusEvent *ev).
[override virtual protected] void QQuickWindow::focusOutEvent(QFocusEvent *ev)
Reimplementa: QWindow::focusOutEvent(QFocusEvent *ev).
[signal] void QQuickWindow::frameSwapped()
Esta señal se emite cuando un fotograma se ha puesto en cola para su presentación. Con la sincronización vertical activada, la señal se emite como máximo una vez por intervalo vsync en una escena de animación continua.
Esta señal se emitirá desde el subproceso de renderizado del gráfico de la escena.
QImage QQuickWindow::grabWindow()
Toma el contenido de la ventana y lo devuelve como imagen.
Es posible llamar a la función grabWindow() cuando la ventana no está visible. Esto requiere que la ventana sea created y tenga un tamaño válido y que no haya otras instancias de QQuickWindow renderizándose en el mismo proceso.
Nota: Cuando se utiliza esta ventana en combinación con QQuickRenderControl, el resultado de esta función es una imagen vacía, a menos que el backend software esté en uso. Esto se debe a que cuando se redirige la salida a un recurso gráfico gestionado por la aplicación (como, una textura) utilizando QQuickRenderControl y setRenderTarget(), la aplicación está mejor preparada para gestionar y ejecutar una eventual operación de read back, ya que para empezar tiene el control total del recurso.
Advertencia: Llamar a esta función causará problemas de rendimiento.
Atención: Esta función sólo puede ser llamada desde el hilo GUI.
[static, since 6.0] QSGRendererInterface::GraphicsApi QQuickWindow::graphicsApi()
Devuelve la API gráfica que utilizaría el gráfico de escena si se inicializara en este momento.
La forma estándar de consultar la API utilizada por el gráfico de escena es utilizar QSGRendererInterface::graphicsApi() una vez que el gráfico de escena se ha inicializado, por ejemplo cuando o después de que se emita la señal sceneGraphInitialized(). En ese caso se obtiene el resultado verdadero, real, porque entonces se sabe que todo se inicializó correctamente usando esa API de gráficos.
Esto no siempre es conveniente. Si la aplicación necesita configurar frameworks externos, o necesita trabajar con setGraphicsDevice() de una manera que depende de la lógica de selección de la API incorporada en el gráfico de escena, no siempre es feasiable aplazar tales operaciones hasta después de que QQuickWindow se haya hecho visible o QQuickRenderControl::initialize() haya sido llamado.
Por lo tanto, esta función estática se proporciona como contrapartida a setGraphicsApi(): puede llamarse en cualquier momento, y el resultado refleja qué API elegiría el gráfico de escena si estuviera inicializado en el momento de la llamada.
Nota: Esta función estática está pensada para ser invocada únicamente en el hilo principal (GUI). Para consultar la API durante la renderización, utilice QSGRendererInterface, ya que ese objeto vive en el subproceso de renderización.
Nota: Esta función no tiene en cuenta los backends de gráficos de escena.
Esta función se introdujo en Qt 6.0.
Véase también setGraphicsApi().
[since 6.0] QQuickGraphicsConfiguration QQuickWindow::graphicsConfiguration() const
Devuelve el QQuickGraphicsConfiguration pasado a setGraphicsConfiguration(), o uno construido por defecto en caso contrario.
Esta función se introdujo en Qt 6.0.
Véase también setGraphicsConfiguration().
[since 6.0] QQuickGraphicsDevice QQuickWindow::graphicsDevice() const
Devuelve el QQuickGraphicsDevice pasado a setGraphicsDevice(), o uno construido por defecto en caso contrario.
Esta función se introdujo en Qt 6.0.
Véase también setGraphicsDevice().
const QQuickWindow::GraphicsStateInfo &QQuickWindow::graphicsStateInfo()
Devuelve una referencia a una estructura GraphicsStateInfo que describe parte del estado interno del RHI, en particular, el estado de almacenamiento en búfer doble o triple del backend (como las integraciones de Vulkan o Metal). Esto es relevante cuando las APIs gráficas subyacentes son Vulkan o Metal, y el código de renderizado externo desea realizar doble o triple buffering de sus propios recursos que cambian a menudo, tales como, buffers uniformes, con el fin de evitar el estancamiento del pipeline.
[static] bool QQuickWindow::hasDefaultAlphaBuffer()
Devuelve si se utiliza la transparencia alfa en las ventanas recién creadas.
Véase también setDefaultAlphaBuffer().
[override virtual protected] void QQuickWindow::hideEvent(QHideEvent *)
Reimplementa: QWindow::hideEvent(QHideEvent *ev).
QQmlIncubationController *QQuickWindow::incubationController() const
Devuelve un controlador de incubación que empalma la incubación entre marcos para esta ventana. QQuickView instala automáticamente este controlador por usted, de lo contrario tendrá que instalarlo usted mismo utilizando QQmlEngine::setIncubationController().
El controlador es propiedad de la ventana y será destruido cuando la ventana sea eliminada.
bool QQuickWindow::isPersistentGraphics() const
Devuelve si los recursos gráficos esenciales pueden liberarse durante el tiempo de vida de QQuickWindow.
Nota: Esto es una sugerencia, y no está garantizado que se tenga en cuenta.
Véase también setPersistentGraphics().
bool QQuickWindow::isPersistentSceneGraph() const
Devuelve si los nodos y recursos del grafo de escena pueden ser liberados durante el tiempo de vida de este QQuickWindow.
Nota: Esto es una sugerencia. Cuándo y cómo sucede esto es específico de la implementación.
bool QQuickWindow::isSceneGraphInitialized() const
Devuelve true si el gráfico de escena ha sido inicializado; en caso contrario devuelve false.
[override virtual protected] void QQuickWindow::keyPressEvent(QKeyEvent *e)
Reimplementa: QWindow::keyPressEvent(QKeyEvent *ev).
[override virtual protected] void QQuickWindow::keyReleaseEvent(QKeyEvent *e)
Reimplementa: QWindow::keyReleaseEvent(QKeyEvent *ev).
[override virtual protected] void QQuickWindow::mouseDoubleClickEvent(QMouseEvent *event)
Reimplementa: QWindow::mouseDoubleClickEvent(QMouseEvent *ev).
[override virtual protected] void QQuickWindow::mouseMoveEvent(QMouseEvent *event)
Reimplementa: QWindow::mouseMoveEvent(QMouseEvent *ev).
[override virtual protected] void QQuickWindow::mousePressEvent(QMouseEvent *event)
Reimplementa: QWindow::mousePressEvent(QMouseEvent *ev).
[override virtual protected] void QQuickWindow::mouseReleaseEvent(QMouseEvent *event)
Reimplementa: QWindow::mouseReleaseEvent(QMouseEvent *ev).
[slot] void QQuickWindow::releaseResources()
Esta función intenta liberar los recursos redundantes actualmente retenidos por la escena QML.
Al llamar a esta función, se solicita al gráfico de escena que libere los recursos gráficos almacenados en caché, como los objetos del conducto de gráficos, los programas de sombreado o los datos de imagen.
Además, dependiendo del bucle de renderizado en uso, esta función también puede provocar que se libere el gráfico de escena y todos los recursos de renderizado relacionados con la ventana. Si esto ocurre, se emitirá la señal sceneGraphInvalidated(), permitiendo a los usuarios limpiar sus propios recursos gráficos. Las funciones setPersistentGraphics() y setPersistentSceneGraph() se pueden utilizar para evitar que esto suceda, si el manejo de la limpieza no es factible en la aplicación, a costa de un mayor uso de memoria.
Nota: La liberación de recursos gráficos almacenados en caché, tales como pipelines gráficos o programas de sombreado no depende de las sugerencias de persistencia. La liberación de los mismos se producirá independientemente de los valores de las sugerencias de persistencia de gráficos y scenegraph.
Nota: Esta función no está relacionada con la función virtual QQuickItem::releaseResources().
Véase también sceneGraphInvalidated(), setPersistentGraphics(), y setPersistentSceneGraph().
[since 6.0] QQuickRenderTarget QQuickWindow::renderTarget() const
Devuelve el QQuickRenderTarget pasado a setRenderTarget(), o uno construido por defecto en caso contrario.
Esta función se introdujo en Qt 6.0.
Véase también setRenderTarget().
QSGRendererInterface *QQuickWindow::rendererInterface() const
Devuelve la interfaz actual del renderizador. El valor siempre es válido y nunca es nulo.
Nota: Esta función puede ser invocada en cualquier momento después de construir el QQuickWindow, incluso mientras isSceneGraphInitialized() es todavía falso. Sin embargo, algunas funciones de la interfaz del renderizador, en particular QSGRendererInterface::getResource() no serán funcionales hasta que el scenegraph esté en funcionamiento. Por otro lado, las consultas de backend, como QSGRendererInterface::graphicsApi() o QSGRendererInterface::shaderType(), siempre serán funcionales.
Nota: La propiedad del puntero devuelto permanece con Qt. La instancia devuelta puede o no ser compartida entre diferentes instancias de QQuickWindow, dependiendo del backend scenegraph en uso. Por lo tanto, se espera que las aplicaciones consulten el objeto de interfaz para cada QQuickWindow en lugar de reutilizar el puntero ya consultado.
Véase también QSGRenderNode y QSGRendererInterface.
[override virtual protected] void QQuickWindow::resizeEvent(QResizeEvent *ev)
Reimplementa: QWindow::resizeEvent(QResizeEvent *ev).
[since 6.6] QRhi *QQuickWindow::rhi() const
Devuelve el objeto QRhi utilizado por esta ventana para el renderizado.
Disponible sólo cuando la ventana utiliza la API 3D de Qt y las abstracciones del lenguaje de sombreado, lo que significa que el resultado es siempre nulo cuando se utiliza la adaptación software.
El resultado sólo es válido cuando se ha inicializado el renderizado, lo que se indica mediante la emisión de la señal sceneGraphInitialized(). Antes de ese momento, el valor devuelto es nulo. Con un QQuickWindow scenegraph regular, en pantalla, la inicialización ocurre típicamente cuando la ventana nativa se expone (se muestra) la primera vez. Cuando se utiliza QQuickRenderControl, la inicialización se realiza en la llamada explícita a initialize().
En la práctica, esta función es un atajo para consultar QRhi a través de QSGRendererInterface.
Esta función se introdujo en Qt 6.6.
[signal] void QQuickWindow::sceneGraphAboutToStop()
Esta señal se emite en el hilo de renderizado cuando el gráfico de la escena está a punto de dejar de renderizarse. Esto ocurre normalmente porque la ventana se ha ocultado.
Las aplicaciones pueden utilizar esta señal para liberar recursos, pero deben estar preparadas para reinstalarlos de nuevo rápidamente. El gráfico de escena y el contexto gráfico no se liberan en este momento.
Advertencia: Esta señal se emite desde el hilo de renderizado del gráfico de escena. Si tu función de slot necesita terminar antes de que la ejecución continúe, debes asegurarte de que la conexión es directa (ver Qt::ConnectionType).
Advertencia: Asegúrate de que un manejador de señal para sceneGraphAboutToStop() deja el contexto gráfico en el mismo estado en el que estaba cuando se introdujo el manejador de señal. De lo contrario, la escena no se renderizará correctamente.
Véase también sceneGraphInvalidated().
[static] QString QQuickWindow::sceneGraphBackend()
Devuelve el backend del scenegraph Qt Quick solicitado.
Nota: El valor de retorno de esta función puede seguir siendo obsoleto por llamadas posteriores a setSceneGraphBackend() hasta que se haya construido el primer QQuickWindow de la solicitud.
Nota: El valor sólo refleja la solicitud en la variable de entorno QT_QUICK_BACKEND después de que se haya construido un QQuickWindow.
Véase también setSceneGraphBackend().
[signal] void QQuickWindow::sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)
Esta señal se emite cuando se produce un error durante la inicialización del gráfico de escena.
Las aplicaciones deben conectarse a esta señal si desean gestionar errores, como fallos en la creación de contextos gráficos, de forma personalizada. Cuando no hay ninguna ranura conectada a la señal, el comportamiento será diferente: Quick imprimirá el mensaje message, o mostrará un cuadro de mensaje, y terminará la aplicación.
Esta señal será emitida desde el hilo GUI.
[signal] void QQuickWindow::sceneGraphInitialized()
Esta señal se emite cuando el gráfico de escena se ha inicializado.
Esta señal se emitirá desde el subproceso de renderizado del gráfico de escena.
[signal] void QQuickWindow::sceneGraphInvalidated()
Esta señal se emite cuando el gráfico de escena ha sido invalidado.
Esta señal implica que el contexto de renderizado gráfico utilizado ha sido invalidado y todos los recursos de usuario ligados a ese contexto deben ser liberados.
Cuando se renderiza con OpenGL, el QOpenGLContext de esta ventana estará ligado cuando se llame a esta función. La única excepción es si el OpenGL nativo ha sido destruido fuera del control de Qt, por ejemplo a través de EGL_CONTEXT_LOST.
Esta señal será emitida desde el hilo de renderizado del gráfico de escena.
void QQuickWindow::scheduleRenderJob(QRunnable *job, QQuickWindow::RenderStage stage)
Programa job para que se ejecute cuando el renderizado de esta ventana alcance el valor dado stage.
Esto es una conveniencia a las señales equivalentes en QQuickWindow para tareas "one shot".
La ventana toma posesión de job y la borrará cuando el trabajo se haya completado.
Si la renderización se detiene antes de que job tenga la oportunidad de ejecutarse, el trabajo se ejecutará y luego se borrará como parte de la limpieza del gráfico de la escena. Si la ventana nunca se muestra y no hay renderizado antes de que QQuickWindow se destruya, todos los trabajos pendientes se destruirán sin que se llame a su método run().
Si la renderización está ocurriendo en un hilo diferente, entonces el trabajo ocurrirá en el hilo de renderización.
Si stage es NoStage, job se ejecutará lo antes posible siempre que el hilo de renderizado no esté ocupado renderizando un fotograma. Si la ventana no está expuesta, y no es renderizable, en el momento en que el trabajo es publicado o manejado, el trabajo es borrado sin ejecutar el método run(). Si se está utilizando un renderizador sin hilos, el método run() del trabajo se ejecuta de forma sincrónica. Cuando se renderiza con OpenGL, el contexto OpenGL se cambia al contexto del renderizador antes de ejecutar cualquier trabajo, incluyendo los trabajos de NoStage.
Nota: Esta función no desencadena el renderizado; los trabajos dirigidos a cualquier otro escenario que no sea NoStage se almacenarán ejecutándose hasta que el renderizado se desencadene en otro lugar. Para forzar que el trabajo se ejecute antes, llame a QQuickWindow::update();
Ver también beforeRendering(), afterRendering(), beforeSynchronizing(), afterSynchronizing(), frameSwapped(), y sceneGraphInvalidated().
[static] void QQuickWindow::setDefaultAlphaBuffer(bool useAlpha)
useAlpha especifica si se debe utilizar la transparencia alfa en las ventanas recién creadas.
En cualquier aplicación que espere crear ventanas translúcidas, es necesario establecer este valor a true antes de crear la primera QQuickWindow. El valor por defecto es false.
Véase también hasDefaultAlphaBuffer().
[static, since 6.0] void QQuickWindow::setGraphicsApi(QSGRendererInterface::GraphicsApi api)
Solicita los gráficos especificados api.
Cuando se utiliza la adaptación de gráficos incorporada y predeterminada, api especifica qué API de gráficos (OpenGL, Vulkan, Metal o Direct3D) debe utilizar el gráfico de escena para renderizar. Además, el backend software también está integrado y puede solicitarse estableciendo api en QSGRendererInterface::Software.
A diferencia de setSceneGraphBackend(), que sólo se puede utilizar para solicitar un backend determinado (incorporado o instalado como plugins cargados dinámicamente), esta función trabaja con el concepto de APIs gráficas de nivel superior. Cubre los backends que se suministran con Qt Quick, y por lo tanto tienen valores correspondientes en el enum QSGRendererInterface::GraphicsApi.
Cuando no se llama a esta función en absoluto, y tampoco se establece la variable de entorno equivalente QSG_RHI_BACKEND, el gráfico de escena elegirá la API gráfica a utilizar basándose en la plataforma.
Esta función adquiere importancia en aplicaciones que sólo están preparadas para renderizar con una API determinada. Por ejemplo, si la aplicación renderiza de forma nativa con OpenGL o Vulkan, querrá asegurarse de que Qt Quick renderiza también con OpenGL o Vulkan. Se espera que estas aplicaciones llamen a esta función al principio de su función main().
Nota: La llamada a esta función debe realizarse antes de construir el primer QQuickWindow en la aplicación. La API gráfica no puede cambiarse después.
Nota: Cuando se utiliza en combinación con QQuickRenderControl, esta regla se relaja: es posible cambiar la API de gráficos, pero sólo cuando todas las instancias existentes de QQuickRenderControl y QQuickWindow han sido destruidas.
Para consultar qué API gráfica está utilizando el gráfico de escena para renderizar, QSGRendererInterface::graphicsApi() después del gráfico de escena has initialized, lo que suele ocurrir o bien cuando la ventana se hace visible por primera vez, o bien cuando se llama a QQuickRenderControl::initialize().
Para volver al comportamiento por defecto, donde el gráfico de escena elige una API gráfica basada en la plataforma y otras condiciones, establece api a QSGRendererInterface::Unknown.
Esta función se introdujo en Qt 6.0.
Véase también graphicsApi().
[since 6.0] void QQuickWindow::setGraphicsConfiguration(const QQuickGraphicsConfiguration &config)
Establece la configuración gráfica para esta ventana. config contiene varios ajustes que pueden ser tenidos en cuenta por el gráfico de escena al inicializar los dispositivos y contextos gráficos subyacentes.
Dicha configuración adicional, especificando por ejemplo qué extensiones de dispositivo habilitar para Vulkan, se vuelve relevante y esencial cuando se integra código de renderizado gráfico nativo que depende de ciertas extensiones. Lo mismo ocurre cuando se integra con motores 3D o VR externos, como OpenXR.
Nota: La configuración se ignora cuando se adoptan dispositivos gráficos existentes a través de setGraphicsDevice() ya que el grafo de escena no tiene entonces el control de la construcción real de esos objetos.
QQuickGraphicsConfiguration Las instancias son implícitamente compartidas, copiables, y pueden ser pasadas por valor.
Advertencia: Establecer un QQuickGraphicsConfiguration en un QQuickWindow debe ocurrir lo suficientemente pronto, antes de que el gráfico de escena se inicialice por primera vez para esa ventana. Con ventanas en pantalla esto significa que la llamada debe hacerse antes de invocar show() en QQuickWindow o QQuickView. Con QQuickRenderControl la configuración debe finalizarse antes de llamar a initialize().
Esta función se introdujo en Qt 6.0.
Véase también graphicsConfiguration().
[since 6.0] void QQuickWindow::setGraphicsDevice(const QQuickGraphicsDevice &device)
Establece los objetos de dispositivo gráfico para esta ventana. El scenegraph utilizará el dispositivo existente, el dispositivo físico y otros objetos especificados por device en lugar de crear nuevos.
Esta función se utiliza muy a menudo en combinación con QQuickRenderControl y setRenderTarget(), con el fin de redirigir Qt Quick renderizado en una textura.
Un QQuickGraphicsDevice construido por defecto no cambia el comportamiento por defecto de ninguna manera. Una vez que se pasa un device creado a través de una de las funciones de fábrica de QQuickGraphicsDevice, como, QQuickGraphicsDevice::fromDeviceObjects(), y el scenegraph utiliza una API de gráficos coincidente (con el ejemplo de fromDeviceObjects(), que sería Vulkan), el scenegraph utilizará los objetos de dispositivo existentes (como, el VkPhysicalDevice, VkDevice, y el índice de familia de cola de gráficos, en el caso de Vulkan) encapsulados por el QQuickGraphicsDevice. Esto permite utilizar el mismo dispositivo, y así compartir recursos, como buffers y texturas, entre Qt Quick y los motores de render nativos.
Atención: Esta función sólo puede ser llamada antes de inicializar el scenegraph y no tendrá ningún efecto si se llama después. En la práctica, esto significa llamarla justo antes de QQuickRenderControl::initialize().
Como ejemplo, esta vez con Direct3D, se espera que el uso típico sea el siguiente:
// 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); ...
El aspecto clave del uso de esta función es asegurar que los recursos o handles a recursos, como texture en el ejemplo anterior, sean visibles y utilizables tanto por el motor de renderizado externo como por el renderizador del scenegraph. Esto requiere utilizar el mismo dispositivo gráfico (o con OpenGL, el contexto OpenGL).
QQuickGraphicsDevice Las instancias son implícitamente compartidas, copiables y pueden pasarse por valor. No poseen los objetos nativos asociados (como el ID3D11Device del ejemplo).
Nota: El uso de QQuickRenderControl no siempre implica tener que llamar a esta función. Cuando no sea necesario adoptar un dispositivo o contexto existente, no se debe llamar a esta función, y el gráfico de escena inicializará entonces sus propios dispositivos y contextos normalmente, tal y como lo haría con un QQuickWindow en pantalla.
Esta función se introdujo en Qt 6.0.
Véase también graphicsDevice(), QQuickRenderControl, setRenderTarget(), y setGraphicsApi().
void QQuickWindow::setPersistentGraphics(bool persistent)
Establece si los recursos gráficos (dispositivo gráfico o contexto, swapchain, buffers, texturas) deben ser preservados, y no pueden ser liberados hasta que la última ventana sea eliminada, a persistent. El valor por defecto es true.
Cuando se llama a releaseResources(), o cuando la ventana se oculta (más específicamente, no renderizable), algunos bucles de render tienen la posibilidad de liberar todos los recursos gráficos, no sólo los almacenados en caché. Esto puede liberar memoria temporalmente, pero también significa que el motor de renderizado tendrá que hacer una reinicialización completa y potencialmente costosa de los recursos cuando la ventana necesite ser renderizada de nuevo.
Nota: Las reglas para cuando una ventana no es renderizable son específicas de la plataforma y del gestor de ventanas.
Nota: Todos los recursos gráficos se liberan cuando se borra el último QQuickWindow, independientemente de esta configuración.
Nota: Esta es una sugerencia, y no se garantiza que se tenga en cuenta.
Nota: Esta sugerencia no se aplica a los recursos en caché, que son relativamente baratos de eliminar y volver a crear más tarde. Por lo tanto, si se llama a releaseResources(), normalmente se liberarán independientemente del valor de esta sugerencia.
Véase también isPersistentGraphics(), setPersistentSceneGraph(), sceneGraphInitialized(), sceneGraphInvalidated() y releaseResources().
void QQuickWindow::setPersistentSceneGraph(bool persistent)
Establece si los nodos y recursos del gráfico de escena son persistent. Persistente significa que los nodos y recursos no pueden ser liberados. El valor por defecto es true.
Al llamar a releaseResources(), cuando la ventana se oculta (más específicamente, no renderizable), algunos bucles de render tienen la posibilidad de liberar los nodos del gráfico de escena y los recursos gráficos relacionados. Esto libera memoria temporalmente, pero también significará que el gráfico de escena tiene que ser reconstruido cuando la ventana se renderice la próxima vez.
Nota: Las reglas para cuando una ventana no es renderizable son específicas de la plataforma y del gestor de ventanas.
Nota: Los nodos y recursos del gráfico de escena siempre se liberan cuando se borra el último QQuickWindow, independientemente de esta configuración.
Nota : Esto es una sugerencia, y no está garantizado que se tenga en cuenta.
Véase también isPersistentSceneGraph(), setPersistentGraphics(), sceneGraphInvalidated(), sceneGraphInitialized(), y releaseResources().
[since 6.0] void QQuickWindow::setRenderTarget(const QQuickRenderTarget &target)
Establece el objetivo de renderizado de esta ventana en target.
Un QQuickRenderTarget sirve como un manejador opaco para un objeto nativo renderizable, más comúnmente una textura 2D, y metadatos asociados, como el tamaño en píxeles.
Un QQuickRenderTarget construido por defecto significa que no hay redirección. Por otro lado, un target válido, creado a través de una de las funciones estáticas de fábrica de QQuickRenderTarget, permite redirigir el renderizado de la escena Qt Quick: ya no se dirigirá a los buffers de color de la superficie asociada a la ventana, sino a las texturas u otros objetos gráficos especificados en target.
Por ejemplo, suponiendo que el scenegraph esté utilizando Vulkan para renderizar, se puede redirigir su salida a un VkImage. Para APIs gráficas como Vulkan, también se debe proporcionar el diseño de la imagen. Las instancias de QQuickRenderTarget se comparten implícitamente, son copiables y se pueden pasar por valor. Sin embargo, no son propietarias de los objetos nativos asociados (como la VkImage del ejemplo).
QQuickRenderTarget rt = QQuickRenderTarget::fromVulkanImage(vulkanImage, VK_IMAGE_LAYOUT_PREINITIALIZED, pixelSize); quickWindow->setRenderTarget(rt);
Esta función se utiliza muy a menudo en combinación con QQuickRenderControl y un QQuickWindow invisible, con el fin de renderizar el contenido de Qt Quick en una textura, sin crear una ventana nativa en pantalla para este QQuickWindow.
Cuando el objetivo deseado, o los datos asociados, como el tamaño, cambien, llame a esta función con un nuevo QQuickRenderTarget. Construir instancias de QQuickRenderTarget y llamar a esta función es barato, pero tenga en cuenta que establecer un nuevo target con un objeto nativo diferente u otros datos puede llevar a pasos de inicialización potencialmente caros cuando el scenegraph está a punto de renderizar el siguiente fotograma. Por lo tanto, cambie el objetivo sólo cuando sea necesario.
Nota: La ventana no se apropia de ningún objeto nativo referenciado en target.
Nota: Es responsabilidad de quien llama asegurarse de que los objetos nativos a los que se hace referencia en target son válidos también para el renderizador del scenegraph. Por ejemplo, con Vulkan, Metal y Direct3D esto implica que la textura o imagen se crea en el mismo dispositivo gráfico que es utilizado por el scenegraph internamente. Por lo tanto, cuando se trata de objetos de textura creados en un dispositivo o contexto ya existente, esta función se utiliza a menudo en combinación con setGraphicsDevice().
Nota: Con las APIs gráficas, cuando sea relevante, la aplicación debe prestar atención a las transiciones de disposición de imágenes realizadas por el scenegraph. Por ejemplo, una vez que una VkImage se asocia con el scenegraph llamando a esta función, su diseño pasará a VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL al renderizar un fotograma.
Atención: Esta función sólo puede ser llamada desde el hilo que está haciendo el renderizado.
Esta función se introdujo en Qt 6.0.
Ver también renderTarget(), QQuickRenderControl, setGraphicsDevice(), y setGraphicsApi().
[static] void QQuickWindow::setSceneGraphBackend(const QString &backend)
Solicita un Qt Quick scenegraph backend. Los backends pueden estar incorporados o instalarse en forma de plugins cargados dinámicamente.
Nota: La llamada a la función debe realizarse antes de construir el primer QQuickWindow en la aplicación. No se puede cambiar después.
Consulte Cambiar entre adaptaciones en su aplicación para obtener más información sobre la lista de backends. Si backend no es válido o se produce un error, la solicitud se ignora.
Nota: Llamar a esta función es equivalente a establecer las variables de entorno QT_QUICK_BACKEND o QMLSCENE_DEVICE. Sin embargo, esta API es más segura de usar en aplicaciones que generan otros procesos ya que no hay necesidad de preocuparse por la herencia de entornos.
Véase también sceneGraphBackend().
[static] void QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType renderType)
Establece el tipo de representación por defecto de los elementos de tipo texto en Qt Quick a renderType.
Nota: establecer el tipo de representación sólo afectará a los elementos creados posteriormente; el tipo de representación de los elementos existentes no se modificará.
Véase también textRenderType().
[override virtual protected] void QQuickWindow::showEvent(QShowEvent *)
Reimplementa: QWindow::showEvent(QShowEvent *ev).
[since 6.6] QRhiSwapChain *QQuickWindow::swapChain() const
Devuelve el QRhiSwapChain utilizado por esta ventana, si existe.
Nota: Sólo las ventanas en pantalla respaldadas por uno de los bucles de renderizado estándar (como, basic o threaded) tendrán una swapchain. En caso contrario, el valor devuelto es null. Por ejemplo, el resultado es siempre null cuando la ventana se utiliza con QQuickRenderControl.
Esta función se introdujo en Qt 6.6.
[override virtual protected] void QQuickWindow::tabletEvent(QTabletEvent *event)
Reimplementa: QWindow::tabletEvent(QTabletEvent *ev).
[static] QQuickWindow::TextRenderType QQuickWindow::textRenderType()
Devuelve el tipo de representación de los elementos de tipo texto en Qt Quick. El valor por defecto es QQuickWindow::QtTextRendering.
Véase también setTextRenderType().
[slot] void QQuickWindow::update()
Programa la ventana para renderizar otro fotograma.
Llamar a QQuickWindow::update() difiere de QQuickItem::update() en que siempre desencadena un repintado, independientemente de los cambios en el gráfico de escena subyacente o no.
[override virtual protected] void QQuickWindow::wheelEvent(QWheelEvent *event)
Reimplementa: 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.