Auf dieser Seite

Qt Quick Beispiele – Einbettung in Widgets

Veranschaulicht die Einbettung eines „ QQuickWindow “ in eine „ QWidget “-Benutzeroberfläche über „ QWidget::createWindowContainer()“.

Widget-Fenster mit QLineEdit-Feldern und eingebettetem QML-Inhalt, in dem zwei TextField-Instanzen angezeigt werden

Dieses Beispiel veranschaulicht einen der Ansätze zum Einfügen von „ Qt Quick “-Inhalten in eine auf „ QWidget “ basierende Anwendung. „ QQuickView “ und seine übergeordnete Klasse „ QQuickWindow “ leiten sich von „ QWindow “ ab. Das bedeutet, dass sie wie jede andere „ QWindow “-Klasse mit „ QWidget::createWindowContainer()“ verwendet werden können.

Ausführen des Beispiels

Sie können das Beispiel wie folgt ausführen:

Die interne Einbettung des Fensters führt dazu, dass ein natives untergeordnetes Widget innerhalb der Widget-Hierarchie erstellt wird, und das Fenster (im Beispiel das „ QQuickView “) wird einem neuen übergeordneten Widget zugeordnet. Das Container-Widget sorgt dafür, das untergeordnete Fenster so neu zu positionieren, dass es als Teil der Benutzeroberfläche erscheint, obwohl es sich in Wirklichkeit um ein separates natives Fenster handelt, das unabhängig von seinem übergeordneten, auf „ QWidget “ basierenden Top-Level-Fenster gezeichnet wird.

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);
}

Der entscheidende Schritt bei der Initialisierung ist die Erstellung von ` container`, einem ` QWidget `, das das ` QQuickView` umschließt und hostet. Dieses Widget kann dann wie jedes andere ` QWidget` zu einem Layout hinzugefügt werden.

Hinweis: Die Verwendung der nativen Fenstereinbettung ist nur ein möglicher Ansatz, um Benutzeroberflächen von „ QWidget “ und „ Qt Quick “ zu kombinieren. Der andere, häufiger verwendete Ansatz hierfür ist „ QQuickWidget “. Ein Beispiel für die Verwendung von „ QQuickWidget “ finden Sie im Beispiel „Qt Quick Widgets “. Intern gibt es erhebliche Unterschiede hinsichtlich der Darstellung und der Ereignisbehandlung. „ QQuickWidget “ verwendet überhaupt keine nativen Fenster und leitet die Darstellung von „ Qt Quick “ in eine Textur um, die dann über eine 3D-Grafik-API wie OpenGL oder Vulkan mit dem restlichen Inhalt von „ QWidget “ zusammengesetzt wird. Dies bietet mehr Flexibilität, geht jedoch zu Lasten der Leistung. Es funktioniert auch auf Plattformen, auf denen es kein eigentliches Fenstersystem und kein Konzept für native Fenster gibt. Der in diesem Beispiel gezeigte Ansatz der Fenstereinbettung kann zwar leistungsstärker sein, eignet sich jedoch am besten für Benutzeroberflächen, bei denen der Inhalt von Qt Quick einen festen rechteckigen Bereich einnimmt und anschließend nicht in der Größe angepasst, gestapelt oder beschnitten wird.

Beispielprojekt @ code.qt.io

Siehe auch 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.