Qt Quick 例 - ウィジェットへの埋め込み
QWidget::createWindowContainer() を使用して、QQuickWindow をQWidget UI に埋め込む方法を示します。

この例では、QWidget ベースのアプリケーションにQt Quick のコンテンツを追加する方法の一つを示しています。QQuickView およびその親クラスであるQQuickWindow は、QWindow から派生しています。つまり、これらは他のQWindow と同様に、QWidget::createWindowContainer() と共に使用できます。
例の動作
以下の手順でサンプルを実行できます:
- Qt Creator
Welcome モードを開き、Examples からこの例を選択します。詳細については、Qt Creator: チュートリアル「ビルドと実行」を参照してください。
- Qt Extension for Visual Studio Code
Command Palette から `Qt: Open Qt examples ` コマンドを実行し、リストからサンプルを選択します。詳細については、Qt Extension for Visual Studio Code の「チュートリアル:ビルドと実行」を参照してください。
ウィンドウを内部的に埋め込むと、ウィジェット階層内にネイティブの子ウィジェットが作成され、ウィンドウ(この例ではQQuickView )の親が変更されます。 コンテナウィジェットは、子ウィンドウの位置調整を行い、実際には親である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);
}初期化時の重要なステップは、`container`の生成です。これは、`QQuickView`をラップしてホストする`QWidget `です。このウィジェットは、他の`QWidget`と同様にレイアウトに追加できます。
注: ネイティブウィンドウの埋め込みは、 QWidget とQt Quick のユーザーインターフェースを組み合わせるための、ひとつのアプローチにすぎません。この目的でより一般的に使用されるもうひとつのアプローチは、QQuickWidget です。QQuickWidget の使用例については、「Qt Quick ウィジェットの例」を参照してください。 レンダリングやイベント処理に関しては、内部的に大きな違いがあります。QQuickWidget はネイティブウィンドウを一切使用せず、Qt Quick のレンダリング結果をテクスチャとしてリダイレクトし、OpenGLやVulkanなどの3DグラフィックスAPIを介してQWidget の他のコンテンツと合成します。これにより柔軟性が高まりますが、その代償としてパフォーマンスが低下します。 また、実際のウィンドウシステムが存在せず、ネイティブウィンドウの概念もないプラットフォームでも動作します。一方、この例で示したウィンドウ埋め込み方式は、より高いパフォーマンスを発揮できますが、Qt Quick のコンテンツが固定された矩形領域を占有し、その後サイズ変更、重ね合わせ、またはクリッピングが行われないユーザーインターフェースに最も適しています。
関連項目: 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.