Qt 5.1(そしておそらくこれから)では、QWidget::createWindowContainerを使用する必要があります。アプリケーションはQWidgetベースのアプリケーションであり、QMLをQWidgets内に配置する必要があります。QWidgetsをQMLアプリケーションに配置することはサポートされていません。このブログエントリを参照してください。
フォームクラスがあり、qmlをコンテナウィジェットに入れたい場合。
このQMLをお持ちの場合:
import QtQuick 2.0
Rectangle {
property alias text: textItem.text
width: 156
height: 35
Text {
width: 150
height: 20
text: qsTr("Hello World")
id: textItem
}
}
myqml.qmlというファイルで、そのファイルへのパスをリソースファイルのqmlプレフィックスに挿入します。
次に、フォームコンストラクターに入力します。
ui->setupUi(this); // as normal
QQuickView* view = new QQuickView();
QWidget* widget = QWidget::createWindowContainer(view, ui->container);
view->setSource(QUrl("qrc:/qml/myqml.qml"));
if(view->status()!=QQuickView::Ready)
qDebug("can't initialise view");
widget->setMinimumSize(500,100);
QQuickItem* container = view->rootObject();
次に、QMLと対話する場合:
container->setProperty("text", "Hello alternate universe");