目的
本文简述如何使用QWidget加载QML并显示Hello World。我用的QT版本为5.12。
代码
- 首先使用QTCreator新建 空的qt widget程序。
-
Build System 选择qmake。
-
取消勾选Generate form选项。
-
在.pro文件中增加qt quick 的依赖库,包括qml quickwidgets widgets。
-
为工程添加qml.qrc资源文件。首先右键工程,点击Add New…名称输入qml.qrc。
-
再为qml.qrc资源文件添加qml layout文件,在qml.qrc文件点击右键,选择Add New…在弹出的对话框中选择添加QML file(Qt Quick 2)。输入名称main.qml。
-
编辑main.qml内容如下:
import QtQuick 2.0
Rectangle {
color: "red"
Text {
text: qsTr("Hello, World")
anchors.centerIn: parent
}
}
- 编辑mainwindow.cpp内容如下:
#include "mainwindow.h"
#include <QHBoxLayout>
#include <QQmlEngine>
#include <QQuickWidget>
#include <QQmlContext>
#include <QQuickItem>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) {
QQmlEngine *engine = new QQmlEngine(this);
QQuickWidget *view = new QQuickWidget(engine, this);
setCentralWidget(view);
view->setSource(QUrl("qrc:/main.qml"));
view->setResizeMode(QQuickWidget::SizeRootObjectToView);
}
MainWindow::~MainWindow() {
}
- windows/linux下使用快捷键ctrl+b编译程序,再使用ctrl+r运行程序。如果顺利的话可以看到如下窗口。并且,任意拖动窗口大小文字始终居中屏幕。
总结
- 本例创建Qt Widget Application,而非Qt Quick Application。
- 使用QQuickWidget(继承于QWidget)将main.qml 加载到MainWIndow中。
- 在Qt Widget中可以嵌入QML(QtQuick2.0),反之却不可以。因此本例所述方式可以在尽可能复用现有QWidget下使用新的QML开发UI。
- 如果完全使用QML开发不利于业务/界面的分离。
- 如果会写JS,写起QML会很容易。