如何在QWidget中插入QML视图

时间:2017-04-05 14:30:52

标签: qt qml qtquick2 qwidget

我是QML的初学者并尝试在QWdiget中插入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 个答案:

答案 0 :(得分:2)

有一个特殊的QQuickWidget,专门用于这个目的。

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

答案 1 :(得分:0)

  1. QQmlApplicationEngine * MainWindow.h中的m_engine
  2. 在MainWindows.cpp中设置:
m_engine->addImportPath("qrc:/qml/imports");
m_engine->load(QUrl(QStringLiteral("qrc:/qml/main.qml")));
 // m_engine->rootContext()->setContextProperty("mainWindows", this);
qDebug() << "Ok engine created";`
`QWindow *qmlWindow = qobject_cast<QWindow*>(m_engine->rootObjects().at(0));
QWidget *container = QWidget::createWindowContainer(qmlWindow, this);
container->setMinimumSize(200, 200);
container->setMaximumSize(1200, 900);
ui->verticalLayout->addWidget(container);`