Qt Quick Beispiele - Eingebettet in Widgets

Demonstriert die Einbettung eines QQuickWindow in eine QWidget Benutzeroberfläche über QWidget::createWindowContainer().

Dieses Beispiel demonstriert einen der Ansätze zum Hinzufügen von Qt Quick Inhalten in eine QWidget-basierte Anwendung. QQuickView Die Klasse QQuickWindow und ihre übergeordnete Klasse leiten sich von QWindow ab. Das bedeutet, dass sie mit QWidget::createWindowContainer() verwendet werden können, wie jede andere QWindow.

Ausführen des Beispiels

Zum Ausführen des Beispiels von Qt Creatorauszuführen, öffnen Sie den Modus Welcome und wählen Sie das Beispiel aus Examples. Weitere Informationen finden Sie unter Erstellen und Ausführen eines Beispiels.

Das interne Einbetten des Fensters führt zum Erstellen eines nativen Kind-Widgets innerhalb der Widget-Hierarchie, und das Fenster (im Beispiel QQuickView ) wird repariert. Das Container-Widget kümmert sich um die Neupositionierung des untergeordneten Fensters, so dass es als Teil der Benutzeroberfläche erscheint, obwohl es in Wirklichkeit ein separates natives Fenster ist, das unabhängig von seinem Elternteil, dem QWidget-basierten Fenster der obersten Ebene, 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 wichtigste Schritt während der Initialisierung ist die Erstellung von container, einem QWidget, das das QQuickView umhüllt und beherbergt. 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 zur Kombination von QWidget und Qt Quick Benutzeroberflächen. Der andere, häufiger verwendete Ansatz hierfür ist QQuickWidget. Ein Beispiel für die Verwendung von QQuickWidget finden Sie im Qt Quick Widgets Example. Intern gibt es erhebliche Unterschiede beim Rendering und bei der Ereignisbehandlung. QQuickWidget verwendet überhaupt keine nativen Fenster und leitet das Qt Quick Rendering in eine Textur um, die dann mit dem Rest des QWidget Inhalts über eine 3D-Grafik-API wie OpenGL oder Vulkan zusammengesetzt wird. Das bringt mehr Flexibilität, geht aber auf Kosten der Leistung. Es funktioniert auch auf Plattformen, auf denen es kein echtes Fenstersystem und kein Konzept für native Fenster gibt. Der in diesem Beispiel demonstrierte Ansatz der Fenstereinbettung kann zwar leistungsfähiger sein, eignet sich aber am besten für Benutzeroberflächen, bei denen der Inhalt von Qt Quick einen festen rechteckigen Bereich einnimmt und nicht nachträglich in der Größe verändert, gestapelt oder beschnitten wird.

Beispielprojekt @ code.qt.io

Siehe auch QWidget::createWindowContainer().

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