QWidget::createWindowContainer()

Qt5 になって GUI 関連のアーキテクチャが変更されたことで、QtQuick を表示する QQuickView は QWindow の派生クラスとなりました。Qt4(QtQuick1)の QDeclarativeView は QWidget の派生クラスですから、この辺りの構成は大きく変化したことになります。

これに伴って qt-project.org のフォーラム等でよく見る質問の一つが QWidget の中に QtQuick2 を埋め込みたいと言うものです。これまではこの問題を解決する手法はありませんでしたが、Qt 5.1 で QWidget::createWindowContainer() というメソッドが追加されることになりました。

QQuickView *view = new QQuickView();
...
 
QWidget *container = QWidget::createWindowContainer(view);
container->setMinimumSize(...);
container->setMaximumSize(...);
container->setFocusPolicy(Qt::TabFocus);
 
widgetLayout->addWidget(container);

これは QWindow を引数に渡して、その表示を行う QWidget を生成するメソッドです。基本的に表示のために埋め込むものなので、QWindow と QWidget 間の連携には制限がありますが、これまでの全く出来なかった状態よりはましでしょう。