QQuickWidget Class
La clase QQuickWidget proporciona un widget para mostrar una interfaz de usuario Qt Quick. Más...
| Cabecera: | #include <QQuickWidget> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS QuickWidgets)target_link_libraries(mytarget PRIVATE Qt6::QuickWidgets) |
| qmake: | QT += quickwidgets |
| Hereda: | QWidget |
Tipos públicos
| enum | ResizeMode { SizeViewToRootObject, SizeRootObjectToView } |
| enum | Status { Null, Ready, Loading, Error } |
Propiedades
- resizeMode : ResizeMode
- source : QUrl
- status : Status
Funciones públicas
| QQuickWidget(QWidget *parent = nullptr) | |
| QQuickWidget(QQmlEngine *engine, QWidget *parent) | |
| QQuickWidget(const QUrl &source, QWidget *parent = nullptr) | |
(since 6.9) | QQuickWidget(QAnyStringView uri, QAnyStringView typeName, QWidget *parent = nullptr) |
| virtual | ~QQuickWidget() override |
| QQmlEngine * | engine() const |
| QList<QQmlError> | errors() const |
| QSurfaceFormat | format() const |
| QImage | grabFramebuffer() const |
| QSize | initialSize() const |
| QQuickWindow * | quickWindow() const |
| QQuickWidget::ResizeMode | resizeMode() const |
| QQmlContext * | rootContext() const |
| QQuickItem * | rootObject() const |
| void | setClearColor(const QColor &color) |
| void | setFormat(const QSurfaceFormat &format) |
| void | setResizeMode(QQuickWidget::ResizeMode) |
| QUrl | source() const |
| QQuickWidget::Status | status() const |
Ranuras públicas
(since 6.9) void | loadFromModule(QAnyStringView uri, QAnyStringView typeName) |
(since 6.9) void | setInitialProperties(const QVariantMap &initialProperties) |
| void | setSource(const QUrl &url) |
Señales
| void | sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message) |
| void | statusChanged(QQuickWidget::Status status) |
Funciones protegidas reimplementadas
| virtual void | dragEnterEvent(QDragEnterEvent *e) override |
| virtual void | dragLeaveEvent(QDragLeaveEvent *e) override |
| virtual void | dragMoveEvent(QDragMoveEvent *e) override |
| virtual void | dropEvent(QDropEvent *e) override |
| virtual bool | event(QEvent *e) override |
| virtual void | focusInEvent(QFocusEvent *event) override |
| virtual bool | focusNextPrevChild(bool next) override |
| virtual void | focusOutEvent(QFocusEvent *event) override |
| virtual void | hideEvent(QHideEvent *) override |
| virtual void | keyPressEvent(QKeyEvent *e) override |
| virtual void | keyReleaseEvent(QKeyEvent *e) override |
| virtual void | mouseDoubleClickEvent(QMouseEvent *e) override |
| virtual void | mouseMoveEvent(QMouseEvent *e) override |
| virtual void | mousePressEvent(QMouseEvent *e) override |
| virtual void | mouseReleaseEvent(QMouseEvent *e) override |
| virtual void | paintEvent(QPaintEvent *event) override |
| virtual void | showEvent(QShowEvent *) override |
| virtual void | wheelEvent(QWheelEvent *e) override |
Descripción Detallada
Esta es una envoltura conveniente para QQuickWindow que automáticamente cargará y mostrará una escena QML cuando se le de la URL del archivo fuente principal. Alternativamente, puedes instanciar tus propios objetos usando QQmlComponent y colocarlos en un QQuickWidget configurado manualmente.
Uso típico:
QQuickWidget *view = new QQuickWidget; view->setSource(QUrl::fromLocalFile("myqmlfile.qml")); view->show();
Para recibir errores relacionados con la carga y ejecución de QML con QQuickWidget, puede conectarse a la señal statusChanged() y monitorizar QQuickWidget::Error. Los errores están disponibles a través de QQuickWidget::errors().
QQuickWidget también gestiona el tamaño de la vista y del objeto raíz. Por defecto, el resizeMode es SizeViewToRootObject, que cargará el componente y lo redimensionará al tamaño de la vista. Alternativamente, resizeMode puede ser configurado a SizeRootObjectToView que redimensionará la vista al tamaño del objeto raíz.
Consideraciones sobre el rendimiento
QQuickWidget es una alternativa al uso de QQuickView y QWidget::createWindowContainer(). Las restricciones en el orden de apilamiento no se aplican, haciendo de QQuickWidget la alternativa más flexible, comportándose más como un widget ordinario.
Sin embargo, las ventajas mencionadas se producen a expensas del rendimiento:
- A diferencia de QQuickWindow y QQuickView, QQuickWidget implica al menos una pasada de renderizado adicional dirigida a un buffer de color fuera de la pantalla, normalmente una textura 2D, seguida del dibujo de un quad de textura. Esto supone un aumento de la carga, especialmente para el procesamiento de fragmentos de la GPU.
- El uso de QQuickWidget desactiva el bucle de renderizado en todas las plataformas. Esto significa que algunos de los beneficios del renderizado por hilos, por ejemplo las clases Animator y las animaciones vsync, no estarán disponibles.
Nota: Evita llamar a winId() en un QQuickWidget. Esta función desencadena la creación de una ventana nativa, resultando en un rendimiento reducido y posiblemente fallos de renderizado. El propósito de QQuickWidget es renderizar escenas rápidas sin una ventana nativa separada, por lo que debe evitarse siempre convertirlo en un widget nativo.
Soporte de la API gráfica
QQuickWidget es funcional con todas las APIs de gráficos 3D soportadas por Qt Quick, así como el backend software. Sin embargo, otros backends, por ejemplo OpenVG, no son compatibles e intentar construir un QQuickWidget dará problemas.
Sobreescribir la API gráfica por defecto de la plataforma se hace de la misma manera que con QQuickWindow y QQuickView: bien llamando a QQuickWindow::setGraphicsApi() antes de construir el primer QQuickWidget, o estableciendo la variable de entorno QSG_RHI_BACKEND.
Nota: Una ventana de nivel superior sólo puede utilizar una única API gráfica para el renderizado. Por ejemplo, si se intenta colocar un QQuickWidget que utilice Vulkan y un QOpenGLWidget en la jerarquía de widgets de la misma ventana de nivel superior, se producirán problemas y uno de los widgets no se renderizará como se esperaba.
Gráfico de escena y persistencia de contexto
QQuickWidget acepta QQuickWindow::isPersistentSceneGraph(), lo que significa que las aplicaciones pueden decidir - llamando a QQuickWindow::setPersistentSceneGraph() en la ventana devuelta por la función quickWindow() - dejar que los nodos del gráfico de escena y otros recursos relacionados con la escena Qt Quick sean liberados cada vez que el widget se oculte. Por defecto, la persistencia está activada, al igual que con QQuickWindow.
Cuando se ejecuta con OpenGL, QQuickWindow ofrece la posibilidad de desactivar también los contextos OpenGL persistentes. Este ajuste es actualmente ignorado por QQuickWidget y el contexto es siempre persistente. El contexto OpenGL no se destruye cuando se oculta el widget. El contexto sólo se destruye cuando se destruye el widget o cuando el widget es reparentado en otra jerarquía de widgets hijo de nivel superior. Sin embargo, algunas aplicaciones, en particular aquellas que tienen sus propios recursos gráficos debido a que realizan renderizado OpenGL personalizado en la escena Qt Quick, pueden desear deshabilitar esto último ya que pueden no estar preparadas para manejar la pérdida del contexto al mover un QQuickWidget a otra ventana. Tales aplicaciones pueden establecer el atributo QCoreApplication::AA_ShareOpenGLContexts. Para una discusión sobre los detalles de la inicialización y limpieza de recursos, consulte la documentación de QOpenGLWidget.
Nota: QQuickWidget ofrece un control menos preciso sobre su contexto OpenGL interno que QOpenGLWidget, y existen sutiles diferencias, la más notable es que desactivar el gráfico de escena persistente provocará la destrucción del contexto en un cambio de ventana independientemente de la presencia de QCoreApplication::AA_ShareOpenGLContexts.
Limitaciones
Poner otros widgets debajo y hacer el QQuickWidget transparente no conducirá a los resultados esperados: los widgets debajo no serán visibles. Esto se debe a que en la práctica el QQuickWidget se dibuja antes que todos los demás widgets normales, no OpenGL, y por lo tanto las soluciones transparentes no son factibles. Otro tipo de diseños, como tener widgets encima del QQuickWidget, funcionarán como se espera.
Cuando sea absolutamente necesario, esta limitación puede ser superada estableciendo el atributo Qt::WA_AlwaysStackOnTop en el QQuickWidget. Tenga en cuenta, sin embargo, que esto rompe el orden de apilamiento. Por ejemplo, no sera posible tener otros widgets encima del QQuickWidget, por lo que solo deberia usarse en situaciones donde se requiera un QQuickWidget semitransparente con otros widgets visibles debajo.
Esta limitación solo se aplica cuando hay otros widgets debajo del QQuickWidget dentro de la misma ventana. Hacer la ventana semitransparente, con otras aplicaciones y el escritorio visibles en el fondo, se hace de la manera tradicional: Establezca Qt::WA_TranslucentBackground en la ventana de nivel superior, solicite un canal alfa, y cambie el color claro de Qt Quick Scenegraph a Qt::transparent a través de setClearColor().
Manejo del tabulador
Al presionar la tecla [TAB], el ítem dentro del QQuickWidget obtiene el foco. Si este elemento puede manejar la pulsación de la tecla [TAB], el foco cambiará en consecuencia dentro del elemento, de lo contrario el siguiente widget en la cadena de foco obtiene el foco.
Ver también Exposición de Atributos de Tipos C++ a QML, Qt Quick Ejemplo de Widgets, y QQuickView.
Documentación de tipos de miembros
enum QQuickWidget::ResizeMode
Este enum especifica cómo redimensionar la vista.
| Constante | Valor | Descripción |
|---|---|---|
QQuickWidget::SizeViewToRootObject | 0 | La vista cambia de tamaño con el elemento raíz en el QML. |
QQuickWidget::SizeRootObjectToView | 1 | La vista redimensionará automáticamente el elemento raíz al tamaño de la vista. |
enum QQuickWidget::Status
Especifica el estado de carga de QQuickWidget.
| Constante | Valor | Descripción |
|---|---|---|
QQuickWidget::Null | 0 | Este QQuickWidget no tiene ninguna fuente configurada. |
QQuickWidget::Ready | 1 | Este QQuickWidget ha cargado y creado el componente QML. |
QQuickWidget::Loading | 2 | Este QQuickWidget está cargando datos de red. |
QQuickWidget::Error | 3 | Se han producido uno o más errores. Llame a errors() para obtener una lista de errores. |
Documentación de propiedades
resizeMode : ResizeMode
Determina si la vista debe redimensionar el contenido de la ventana.
Si esta propiedad está establecida a SizeViewToRootObject (por defecto), la vista redimensiona al tamaño del elemento raíz en el QML.
Si esta propiedad es SizeRootObjectToView, la vista redimensionará automáticamente el elemento raíz al tamaño de la vista.
Independientemente de esta propiedad, el sizeHint de la vista es el tamaño inicial del elemento raíz. Ten en cuenta, sin embargo, que como QML puede cargarse dinámicamente, ese tamaño puede cambiar.
Funciones de acceso:
| QQuickWidget::ResizeMode | resizeMode() const |
| void | setResizeMode(QQuickWidget::ResizeMode) |
Véase también initialSize().
source : QUrl
Esta propiedad contiene la URL de la fuente del componente QML.
Asegúrese de que la URL proporcionada está completa y es correcta, en particular, utilice QUrl::fromLocalFile() cuando cargue un archivo desde el sistema de archivos local.
Nota: si se establece una URL de origen, se instanciará el componente QML, aunque la URL no cambie con respecto al valor actual.
Funciones de acceso:
[read-only] status : Status
El componente actual status.
Funciones de acceso:
| QQuickWidget::Status | status() const |
Señal del notificador:
| void | statusChanged(QQuickWidget::Status status) |
Documentación de la función miembro
[explicit] QQuickWidget::QQuickWidget(QWidget *parent = nullptr)
Construye un QQuickWidget con un motor QML por defecto como hijo de parent.
El valor por defecto de parent es nullptr.
QQuickWidget::QQuickWidget(QQmlEngine *engine, QWidget *parent)
Construye un QQuickWidget con el QML engine dado como hijo de parent.
Nota: El QQuickWidget no toma propiedad del objeto engine dado; es responsabilidad de quien lo llama destruir el motor. Si el engine es eliminado antes que la vista, status() devolverá QQuickWidget::Error.
[explicit] QQuickWidget::QQuickWidget(const QUrl &source, QWidget *parent = nullptr)
Construye un QQuickWidget con un motor QML por defecto y el QML source dado como hijo de parent.
El valor por defecto de parent es nullptr.
[explicit, since 6.9] QQuickWidget::QQuickWidget(QAnyStringView uri, QAnyStringView typeName, QWidget *parent = nullptr)
Construye un QQuickWidget con el elemento especificado por uri y typeName y el padre parent. El valor por defecto de parent es nullptr.
Esta función fue introducida en Qt 6.9.
Ver también loadFromModule.
[override virtual noexcept] QQuickWidget::~QQuickWidget()
Destruye el QQuickWidget.
[override virtual protected] void QQuickWidget::dragEnterEvent(QDragEnterEvent *e)
Reimplementa: QWidget::dragEnterEvent(QDragEnterEvent *event).
[override virtual protected] void QQuickWidget::dragLeaveEvent(QDragLeaveEvent *e)
Reimplementa: QWidget::dragLeaveEvent(QDragLeaveEvent *event).
[override virtual protected] void QQuickWidget::dragMoveEvent(QDragMoveEvent *e)
Reimplementa: QWidget::dragMoveEvent(QDragMoveEvent *event).
[override virtual protected] void QQuickWidget::dropEvent(QDropEvent *e)
Reimplementa: QWidget::dropEvent(QDropEvent *event).
QQmlEngine *QQuickWidget::engine() const
Devuelve un puntero a QQmlEngine utilizado para instanciar componentes QML.
QList<QQmlError> QQuickWidget::errors() const
Devuelve la lista de errores que se produjeron durante la última operación de compilación o creación. Cuando el estado no es Error, se devuelve una lista vacía.
Véase también status.
[override virtual protected] bool QQuickWidget::event(QEvent *e)
Reimplementa: QWidget::event(QEvent *event).
[override virtual protected] void QQuickWidget::focusInEvent(QFocusEvent *event)
Reimplementa: QWidget::focusInEvent(QFocusEvent *event).
[override virtual protected] bool QQuickWidget::focusNextPrevChild(bool next)
Reimplementa: QWidget::focusNextPrevChild(bool next).
[override virtual protected] void QQuickWidget::focusOutEvent(QFocusEvent *event)
Reimplementa: QWidget::focusOutEvent(QFocusEvent *event).
QSurfaceFormat QQuickWidget::format() const
Devuelve el formato actual de la superficie.
Si el widget aún no se ha mostrado, se devuelve el formato solicitado.
Véase también setFormat().
QImage QQuickWidget::grabFramebuffer() const
Renderiza un fotograma y lo vuelve a leer en una imagen.
Nota: Se trata de una operación potencialmente costosa.
[override virtual protected] void QQuickWidget::hideEvent(QHideEvent *)
Reimplementa: QWidget::hideEvent(QHideEvent *event).
QSize QQuickWidget::initialSize() const
Devuelve el tamaño inicial del objeto raíz.
Si resizeMode es SizeRootObjectToView, el objeto raíz se redimensionará al tamaño de la vista. Esta función devuelve el tamaño del objeto raíz antes de ser redimensionado.
[override virtual protected] void QQuickWidget::keyPressEvent(QKeyEvent *e)
Reimplementa: QWidget::keyPressEvent(QKeyEvent *event).
[override virtual protected] void QQuickWidget::keyReleaseEvent(QKeyEvent *e)
Reimplementa: QWidget::keyReleaseEvent(QKeyEvent *event).
[slot, since 6.9] void QQuickWidget::loadFromModule(QAnyStringView uri, QAnyStringView typeName)
Carga el componente QML identificado por uri y typeName. Si el componente está respaldado por un archivo QML, source se configurará en consecuencia. Para los tipos definidos en C++, source estará vacío.
Si se ha definido source antes de llamar a este método, se borrará.
Si se llama a este método varias veces con los mismos uri y typeName, se reiniciará el componente QML.
Esta función se introdujo en Qt 6.9.
Véase también setSource, QQmlComponent::loadFromModule, y QQmlApplicationEngine::loadFromModule.
[override virtual protected] void QQuickWidget::mouseDoubleClickEvent(QMouseEvent *e)
Reimplementa: QWidget::mouseDoubleClickEvent(QMouseEvent *event).
[override virtual protected] void QQuickWidget::mouseMoveEvent(QMouseEvent *e)
Reimplementa: QWidget::mouseMoveEvent(QMouseEvent *event).
[override virtual protected] void QQuickWidget::mousePressEvent(QMouseEvent *e)
Reimplementa: QWidget::mousePressEvent(QMouseEvent *event).
[override virtual protected] void QQuickWidget::mouseReleaseEvent(QMouseEvent *e)
Reimplementa: QWidget::mouseReleaseEvent(QMouseEvent *event).
[override virtual protected] void QQuickWidget::paintEvent(QPaintEvent *event)
Reimplementa: QWidget::paintEvent(QPaintEvent *event).
QQuickWindow *QQuickWidget::quickWindow() const
Devuelve el QQuickWindow fuera de pantalla que es utilizado por este widget para controlar el renderizado de Qt Quick. Esto es útil si quieres usar QQuickWindow APIs que no están actualmente expuestas por QQuickWidget, por ejemplo conectarse a la señal QQuickWindow::beforeRendering() para dibujar contenido OpenGL nativo debajo de Qt Quick's own rendering.
Advertencia: Utilice el valor de retorno de esta función con precaución. En particular, no intente nunca mostrar el QQuickWindow, y tenga mucho cuidado cuando utilice otras APIs exclusivas de QWindow.
Advertencia: La ventana fuera de pantalla puede ser borrada (y recreada) durante el tiempo de vida del QQuickWidget, particularmente cuando el widget es movido a otro QQuickWindow. Si necesitas saber cuándo la ventana ha sido reemplazada, conéctate a su señal destroyed().
QQmlContext *QQuickWidget::rootContext() const
Esta función devuelve la raíz de la jerarquía de contextos. Cada componente QML se instancia en un QQmlContext. Los QQmlContext's son esenciales para pasar datos a los componentes QML. En QML, los contextos se organizan jerárquicamente y esta jerarquía es gestionada por QQmlEngine.
QQuickItem *QQuickWidget::rootObject() const
Devuelve la raíz de la vista item. Puede ser nullptr cuando no se ha llamado a setSource(), si se ha llamado con un código roto QtQuick o si el elemento raíz no está definido de otro modo.
[signal] void QQuickWidget::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 OpenGL, 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.
Véase también QQuickWindow::sceneGraphError().
void QQuickWidget::setClearColor(const QColor &color)
Establece el color transparente color. Por defecto es un color opaco.
Para obtener un color semitransparente QQuickWidget, llame a esta función con color establecido en Qt::transparent, establezca el atributo widget Qt::WA_TranslucentBackground en la ventana de nivel superior y solicite un canal alfa a través de setFormat().
Véase también QQuickWindow::setColor().
void QQuickWidget::setFormat(const QSurfaceFormat &format)
Establece la superficie format para el contexto y la superficie fuera de pantalla utilizados por este widget.
Llama a esta función cuando es necesario solicitar un contexto para una versión o perfil OpenGL determinado. Los tamaños de los buffers de profundidad, stencil y alpha se calculan automáticamente y no es necesario solicitarlos explícitamente.
Véase también QWindow::setFormat(), QWindow::format(), y format().
[slot, since 6.9] void QQuickWidget::setInitialProperties(const QVariantMap &initialProperties)
Establece las propiedades iniciales initialProperties con las que se inicializa el componente QML tras llamar a QQuickWidget::setSource().
Nota: Sólo puede utilizar esta función para inicializar propiedades de nivel superior.
Nota: Esta función debe llamarse siempre antes de setSource, ya que no tiene ningún efecto una vez que el componente se ha convertido en Ready.
Esta función se introdujo en Qt 6.9.
Véase también QQmlComponent::createWithInitialProperties().
[slot] void QQuickWidget::setSource(const QUrl &url)
Establece la fuente en url, carga el componente QML y lo instantiza.
Asegúrese de que la URL proporcionada está completa y es correcta, en particular, utilice QUrl::fromLocalFile() cuando cargue un archivo desde el sistema de archivos local.
Si se llama a este método varias veces con la misma URL, se volverá a instanciar el componente QML.
Nota: Función Setter para la propiedad source.
Véase también source().
[override virtual protected] void QQuickWidget::showEvent(QShowEvent *)
Reimplementa: QWidget::showEvent(QShowEvent *event).
QUrl QQuickWidget::source() const
Devuelve la URL de origen, si se ha establecido.
Nota: Función Getter para la propiedad source.
Véase también setSource().
[signal] void QQuickWidget::statusChanged(QQuickWidget::Status status)
Esta señal se emite cuando cambia la dirección status actual del componente.
Nota: Señal notificadora para la propiedad status.
[override virtual protected] void QQuickWidget::wheelEvent(QWheelEvent *e)
Reimplementa: QWidget::wheelEvent(QWheelEvent *event).
© 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.