En esta página

Qt Quick Ejemplos - Incrustado en Widgets

Demuestra cómo incrustar un QQuickWindow en una interfaz de usuario QWidget a través de QWidget::createWindowContainer().

Este ejemplo muestra una de las formas de añadir contenido Qt Quick a una aplicación basada en QWidget. QQuickView QQuickWindow y su clase padre, derivan de QWindow. Esto significa que pueden utilizarse con QWidget::createWindowContainer(), como cualquier otra QWindow.

Ejecución del ejemplo

Para ejecutar el ejemplo de Qt Creatorabra el modo Welcome y seleccione el ejemplo de Examples. Para más información, consulte Qt Creator: Tutorial: Construir y ejecutar.

Al incrustar la ventana internamente se crea un widget hijo nativo dentro de la jerarquía de widgets, y la ventana (la QQuickView en el ejemplo) se reparentea. El widget contenedor se encarga de reposicionar la ventana hija para que parezca formar parte de la interfaz de usuario, aunque en realidad es una ventana nativa separada que pinta independientemente de su padre, la ventana de nivel superior basada en QWidget.

MainWindow::MainWindow()
    : m_quickView(new QQuickView)
{
    QWidget *centralWidget = new QWidget(this);
    QVBoxLayout *layout = new QVBoxLayout(centralWidget);

    m_quickView->setResizeMode(QQuickView::SizeRootObjectToView);
    connect(m_quickView, &QQuickView::statusChanged,
            this, &MainWindow::quickViewStatusChanged);
    connect(m_quickView, &QQuickWindow::sceneGraphError,
            this, &MainWindow::sceneGraphError);
    m_quickView->loadFromModule("embeddedinwidgets", "Main");

    QWidget *container = QWidget::createWindowContainer(m_quickView);
    container->setMinimumSize(m_quickView->size());
    container->setFocusPolicy(Qt::TabFocus);

    layout->addWidget(new QLineEdit(QStringLiteral("A QLineEdit")));
    layout->addWidget(container);
    layout->addWidget(new QLineEdit(QStringLiteral("A QLineEdit")));
    setCentralWidget(centralWidget);

    QMenu *fileMenu = menuBar()->addMenu(tr("File"));
    fileMenu->addAction(tr("Quit"), qApp, &QCoreApplication::quit);
}

El paso clave durante la inicialización es la creación de container, un QWidget que envuelve y aloja el QQuickView. Este widget puede entonces añadirse a un diseño como cualquier otro QWidget.

Nota: La incrustación de ventanas nativas es sólo una de las formas posibles de combinar las interfaces de usuario QWidget y Qt Quick. El otro método más utilizado es QQuickWidget. Consulte el ejemplo de widgetsQt Quick para ver un ejemplo de uso de QQuickWidget. Existen diferencias significativas a nivel interno en lo que respecta a la renderización y la gestión de eventos. QQuickWidget no utiliza ventanas nativas en absoluto y redirige la renderización de Qt Quick a una textura que luego se compone con el resto del contenido de QWidget a través de una API de gráficos 3D como OpenGL o Vulkan. Esto aporta más flexibilidad, a expensas del rendimiento. También funciona en plataformas en las que no existe un sistema de ventanas propiamente dicho ni el concepto de ventanas nativas. Mientras que el enfoque de incrustación de ventanas que se muestra en este ejemplo puede ser más eficaz, pero es más adecuado para interfaces de usuario en las que el contenido de Qt Quick ocupa un área rectangular fija y no se redimensiona, apila o recorta posteriormente.

Proyecto de ejemplo @ code.qt.io

Véase también QWidget::createWindowContainer().

© 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.