Qt 如何在QWidget中插入QML视图
我是QML的初学者,尝试在QWdiget中插入QML视图,但我不明白为什么它不起作用 下面是我的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
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();
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);`