Sur cette page

Qt Quick Exemples - Intégration dans des widgets

Illustre l'intégration d'une page QQuickWindow dans une interface utilisateur QWidget via la méthode QWidget::createWindowContainer().

Fenêtre de widget comportant des champs QLineEdit et du contenu QML intégré affichant deux instances de TextField

Cet exemple illustre l'une des approches permettant d'ajouter du contenu Qt Quick dans une application basée sur QWidget. QQuickView et sa classe parente, QQuickWindow, dérivent de QWindow. Cela signifie qu'elles peuvent être utilisées avec QWidget::createWindowContainer(), comme n'importe quel autre QWindow.

Exécution de l'exemple

Vous pouvez exécuter l'exemple à partir de :

L’intégration de la fenêtre en interne entraîne la création d’un widget enfant natif au sein de la hiérarchie des widgets, et la fenêtre ( QQuickView dans l’exemple) est réaffectée à un parent. Le widget conteneur se charge de repositionner la fenêtre enfant de manière à ce qu’elle semble faire partie de l’interface utilisateur, même si, en réalité, il s’agit d’une fenêtre native distincte qui s’affiche indépendamment de son parent, la fenêtre de niveau supérieur basée sur 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);
}

L’étape clé lors de l’initialisation est la création d’un ` container`, un ` QWidget ` qui encapsule et héberge le ` QQuickView`. Ce widget peut ensuite être ajouté à une mise en page comme n’importe quel autre ` QWidget`.

Remarque : l’utilisation de l’intégration de fenêtres natives n’est qu’une approche possible pour combiner les interfaces utilisateur de QWidget et Qt Quick. L’autre approche, plus couramment utilisée à cet effet, est QQuickWidget. Consultez l’exemple de widgetsQt Quick pour voir comment utiliser QQuickWidget. Il existe des différences significatives au niveau interne en matière de rendu et de gestion des événements. QQuickWidget n’utilise pas du tout de fenêtres natives et redirige le rendu de Qt Quick vers une texture qui est ensuite composée avec le reste du contenu de QWidget via une API graphique 3D telle qu’OpenGL ou Vulkan. Cela apporte davantage de flexibilité, au détriment des performances. Elle fonctionne également sur des plateformes dépourvues de système de fenêtrage et où la notion de fenêtres natives n’existe pas. L’approche d’intégration de fenêtre illustrée par cet exemple peut quant à elle offrir de meilleures performances, mais elle est particulièrement adaptée aux interfaces utilisateur où le contenu de Qt Quick occupe une zone rectangulaire fixe et n’est pas redimensionné, superposé ou rogné par la suite.

Exemple de projet sur code.qt.io

Voir également 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.