2017-04-05 55 views
0

我是QML的初學者,並嘗試在QWdiget中插入QML視圖但我不明白爲什麼它不起作用。如何在QWidget中插入QML視圖

這裏是我的QML文件的一個簡單的例子(這不是真正的文件):

import QtQuick 2.4 
import QtQuick.Controls 1.3 
import QtQuick.Window 2.2 
import QtQuick.Dialogs 1.2 
import QtQuick.Layouts 1.2 
import QtQml.Models 2.1 

     ObjectModel { 

      id: itemModel 
      Rectangle {   
        color: "orange" 
        anchors.fill: parent       
      } 
      Rectangle {   
        color: "orange" 
        anchors.fill: parent       
      } 
      Rectangle {   
        color: "orange" 
        anchors.fill: parent     
      } 
     } 

     ListView { 
      id: my_list 
      anchors.fill: parent 
      model: itemModel 
     } 
    } 

這就是我如何加載它在我的主窗口:

QQuickView *view = new QQuickView(); 
QWidget *container = QWidget::createWindowContainer(view, this); 
container->setMinimumSize(200, 200); 
container->setFocusPolicy(Qt::TabFocus); 
view->setSource(QUrl("main.qml")); 
ui->dockWidget->setWidget(container); 

如何我可以在QWidget中插入我的視圖嗎? 目前,我確實需要使用QML視圖,因爲我需要在已經存在的應用程序中使用它,所以我不能使用QML項目。

非常感謝您的幫助和美好的一天!

回答

2

有一個特殊的QQuickWidget,致力於這個確切的目的。

QQuickWidget *view = new QQuickWidget; 
view->setSource(QUrl::fromLocalFile("myqmlfile.qml")); 
view->show(); 
+0

您好! 感謝您的回答。但是,即使我嘗試使用QQuickWidget,我也遇到以下錯誤:'Syntax error:ListView {' 我不明白這裏有什麼問題。 –

+1

您的代碼沒有根項目。另外,由於QQuickWidget是一個QQuickWindow的包裝,我假定根項目必須是一個窗口,或者是一個ApplicationWindow,或者一個簡單的Window。 – dtech

+0

這很奇怪,因爲我已經試過了。 但是,如果我使用作爲根項目的窗口,我有以下錯誤信息:'QQuickWidget只支持加載從QQuickItem派生的根對象。 如果您的示例使用QML 2(例如qmlscene)和您加載的 具有'import QtQuick 1.0'或'import Qt 4.7'的.qml文件,則會發生此錯誤。 要使用'import QtQuick 1.0'或'import Qt 4.7'加載文件,請在Qt Quick 1模塊中使用 QDeclarativeView類。 ' 但我沒有使用QtQuick 1.0或Qt 4.7。 如果我使用DeclarativeView,它將不支持'import QtQuick 2.4' –