1.QQuickWidget方式加载

QQuickWidget是继承于 QWidget 控件,这种方式主要是用于在 QWidget 界面上加载 QML 界面。

  1. m_pQuickWidget = new QQuickWidget(this);
  2. m_pQuickWidget->setFixedSize(1131, 586);
  3. m_pQuickWidget->setAttribute(Qt::WA_AlwaysStackOnTop);
  4. m_pQuickWidget->setClearColor(QColor(Qt::transparent));
  5. m_pQuickWidget->setSource(QUrl(QStringLiteral("qrc:/UI/Viewer.qml")));
  6. m_pQuickWidget->rootObject()->setWidth(1131);
  7. m_pQuickWidget->rootObject()->setHeight(586);
  8. m_pQuickWidget->move(this->width() / 2.0 - m_pQuickWidget->width() / 2.0, 342);
  9. m_pQuickWidget->show();

2.QQmlApplicationEngined搭配 Window

这种方式是加载以 Window为跟对象的 QML 文件,QML 拥有窗口的完整控制权,可以直接设置标题、窗口尺寸等属性。

  1. #include <QGuiApplication>
  2. #include <QQmlApplicationEngine>
  3. int main(int argc, char *argv[])
  4. {
  5. QGuiApplication app(argc, argv);
  6. QQmlApplicationEngine engine;
  7. engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
  8. if (engine.rootObjects().isEmpty())
  9. return -1;
  10. return app.exec();
  11. }

3.QQuickView 搭配 Item

使用 QQuickView 显示 QML 文件,对窗口的控制权(标题、窗口尺寸)是在 C++代码中,QML 文件是以 Item (及 以Item为根的组件)作为根对象。

  1. #include <QGuiApplication>
  2. #include <QQuickView>
  3. int main(int argc, char *argv[])
  4. {
  5. QGuiApplication app(argc, argv);
  6. QQuickView *view = new QQuickView;
  7. view->setResizeMode(QQuickView::SizeRootObjectToView);
  8. view->setSource(QUrl(QStringLiteral("qrc:/main.qml")));
  9. view->show();
  10. return app.exec();
  11. }

区别

QQuickWidget直接就是个QWidget子类,你可以直接添加到用QtWidgets写的界面里去。QQuickView得转换下才能添加到QtWidgets写的界面里。
这是最主要的区别。底层的实现有差别,QQuickWidget和其他widgets结合更好。界面如果是纯qml的,就用qquickview或者qqmlapplicationengine

参考声明

作者:luoyayun361
来源:CSDN
原文:https ://blog.csdn.net/luoyayun361/article/details/77113516