Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何在QWidget中插入QML视图_Qt_Qml_Qtquick2_Qwidget - Fatal编程技术网

Qt 如何在QWidget中插入QML视图

Qt 如何在QWidget中插入QML视图,qt,qml,qtquick2,qwidget,Qt,Qml,Qtquick2,Qwidget,我是QML的初学者,尝试在QWdiget中插入QML视图,但我不明白为什么它不起作用 下面是我的qml文件的一个简单示例(这不是真实的文件): 这是我在主窗口中加载它的方式: QQuickView *view = new QQuickView(); QWidget *container = QWidget::createWindowContainer(view, this); container->setMinimumSize(200, 200); container->setFoc

我是QML的初学者,尝试在QWdiget中插入QML视图,但我不明白为什么它不起作用

下面是我的qml文件的一个简单示例(这不是真实的文件):

这是我在主窗口中加载它的方式:

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项目

非常感谢你的帮助,祝你度过愉快的一天

有一种特殊的、专门用于这一目的的方法

QQuickWidget *view = new QQuickWidget;
view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
view->show();
  • QQmlApplicationEngine*m_主窗口中的引擎.h
  • 在MainWindows.cpp集合中:
  • m_引擎->addImportPath(“qrc:/qml/imports”);
    m_引擎->负载(QUrl(QStringLiteral(“qrc:/qml/main.qml”));
    //m_engine->rootContext()->setContextProperty(“mainWindows”,这是);
    qDebug()rootObjects().at(0));
    QWidget*container=QWidget::createWindowContainer(qmlWindow,this);
    容器->设置最小尺寸(200200);
    容器->设置最大尺寸(1200900);
    ui->verticalLayout->addWidget(容器)`
    
    你好!谢谢你的回答。但是,即使我尝试使用QQuickWidget,我也会出现以下错误:
    语法错误:ListView{
    我不明白这里出了什么问题。您的代码没有根项。而且,由于QQuickWidget是QQuickWindow的包装器,我假设根项必须是一个窗口,或者是一个
    应用程序窗口
    ,或者只是一个
    窗口
    。这很奇怪,因为我已经尝试过了。但是如果我将窗口用作根项,我已经尝试过了以下错误消息:
    QQuickWidget仅支持加载从QQuickItem派生的根对象。如果您的示例使用的是QML 2(例如qmlscene)并且您加载的.qml文件具有“import QtQuick 1.0”或“import Qt 4.7”,将发生此错误。若要加载具有“import QtQuick 1.0”或“import Qt 4.7”的文件,请使用Qt Quick 1模块中的QDeclarativeView类。
    但我没有使用QtQuick 1.0或Qt 4.7。如果我使用声明视图,它将不支持
    import QtQuick 2.4
    如果你的根是一个长方形,那么它能工作吗?它实际上可能已经是一个
    窗口了,所以它不需要或不支持根作为窗口。看起来像是“QQmlApplicationEngine”要求根作为窗口,不像qtquick view,它不支持窗口根。
    
    QQuickWidget *view = new QQuickWidget;
    view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
    view->show();
    
    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);`