2017-04-05 1 views
0

Ich bin ein Anfänger in QML und versuche, eine QML-Ansicht in QWdiget einzufügen, aber ich verstehe nicht, warum es nicht funktioniert.So fügen Sie QML-Ansicht in ein QWidget ein

Hier ist ein einfaches Beispiel für meine qml Datei (diese nicht die eigentliche Datei ist):

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 
     } 
    } 

Und das ist, wie ich es in meinem Hauptfenster laden:

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); 

Wie könnte ich meine Ansicht in ein QWidget einfügen? Zu diesem Zeitpunkt muss ich wirklich eine QML-Ansicht verwenden und da ich sie in einer bereits vorhandenen Anwendung verwenden muss, kann ich kein QML-Projekt verwenden.

Vielen Dank für Ihre Hilfe und einen schönen Tag!

Antwort

2

Es gibt eine spezielle QQuickWidget, die genau diesem Zweck gewidmet ist.

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

Hallo! Danke für Ihre Antwort. Jedoch, selbst wenn ich versuche, QQuickWidget zu verwenden, habe ich den folgenden Fehler: 'Syntaxfehler: ListView {' Und ich verstehe nicht, was hier falsch ist. –

+1

Ihr Code enthält kein Stammelement. Da QQuickWidget ein Wrapper für ein QQuickWindow ist, nehme ich an, dass das Root-Element ein Fenster sein muss, entweder ein 'ApplicationWindow' oder einfach ein' Window'. – dtech

+0

Das ist seltsam, weil ich das schon probiert habe. Aber wenn ich als root Element ein Fenster verwende, habe ich die folgende Fehlermeldung: 'QQuickWidget unterstützt nur das Laden von Stammobjekten, die von QQuickItem abgeleitet sind. Wenn Ihr Beispiel QML 2 verwendet (z. B. qmlscene) und die .qml-Datei, die Sie geladen haben, importieren QtQuick 1.0 oder Qt 4.7 importieren, wird dieser Fehler auftreten. Verwenden Sie zum Laden von Dateien mit 'QtQuick 1.0 importieren' oder 'Qt 4.7 importieren' die Klasse QDeclarativeView im Modul Qt Quick 1. ' Aber ich verwende QtQuick 1.0 oder Qt 4.7 nicht. Und wenn ich eine DeclarativeView verwende, wird es nicht unterstützen 'QtQuick 2.4 importieren ' –

Verwandte Themen