Qt クイックサンプル - ウィジェットに埋め込む

QWidget::createWindowContainer() を使ってQWidget UI にQQuickWindow を埋め込む例を示します。

この例では、Qt Quick のコンテンツをQWidget ベースのアプリケーションに追加するアプローチの 1 つを示します。QQuickViewこの例では、QQuickWindow とその親クラスである はQWindow から派生しています。これは、他のQWindow と同様に、QWidget::createWindowContainer() で使用できることを意味します。

例の実行

Qt Creator からサンプルを実行するには、Welcome モードを開き、Examples からサンプルを選択します。詳細については、Building and Running an Example を参照してください。

ウィンドウを内部に埋め込むと、ウィジェット階層内にネイティブの子ウィジェットが作成され、ウィンドウ(例では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 QWidget QQuickViewこのウィジェットは、他のQWidget と同様にレイアウトに追加することができます。

注: ネイティブ・ウィンドウの埋め込みを使用することは、QWidget と Qt Quick ユーザー・インタフェースを組み合わせるための可能なアプローチの1つに過ぎません。他の、より一般的に使用されるアプローチはQQuickWidget です。QQuickWidget を使用する例についてはQt Quick Widgets Exampleを参照してください。レンダリングとイベント処理に関しては、内部的に大きな違いがあります。QQuickWidget はネイティブ・ウィンドウをまったく使用せず、Qt Quick のレンダリングをテクスチャにリダイレクトし、OpenGL や Vulkan などの 3D グラフィックス API を介してQWidget の残りのコンテンツと合成します。これにより、パフォーマンスが犠牲になるものの、より柔軟性が高まります。また、実際のウィンドウ・システムやネイティブ・ウィンドウの概念がないプラットフォームでも機能する。一方、この例で示したウィンドウ埋め込みアプローチは、よりパフォーマンスが高くなりますが、Qt Quick のコンテンツが固定の矩形領域を占め、後からサイズを変更したり、重ねたり、切り取ったりしないユーザーインターフェイスに最適です。

サンプルプロジェクト @ code.qt.io

QWidget::createWindowContainer()も参照してください

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。