QWidget嵌入Qml文件
第一种 QQmlApplicationEngine
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral(“qrc:/main.qml”)));
其中main.qml 可以以Window作为根元素,这个时候QML就完全拥有了控制权,可以直接设置窗体的标题、尺寸等信息;
第二种 QQuickView
QQuickView最常见的用法如下:
QQuickView view;
view.setResizeMode (QQuickView::SizeRootObjectToView);
view.setSource (QUrl(“qrc:/main.qml”));
view.show ();
注意:其中qml文件不能以Window作为根元素,最佳选择是使用Item为根元素,否则会警告:
QQuickView does not support using windows as a root item.
If you wish to create your root window from QML, consider using QQmlApplicationEngine instead.
第三种 QQuickWidget
官网自带的说明例子.一般用来在QWidget界面上加载QML界面
QQuickWidget *view = new QQuickWidget;
view->setSource(QUrl::fromLocalFile(“myqmlfile.qml”));
view->show();
QML 是一种基于 JavaScript 的声明式语言
QML 文档描述了一个对象树。QML 元素包含了其构造块、图形元素(矩形、图片等)和行为(例如动画、切换等)。这些 QML 元素按照一定的嵌套关系构成复杂的组件,供用户交互。
Qt Quick 就是使用 QML 构建的一套类库。
一个 QML 文档分为 import 和对象声明两部分。如果你要使用 Qt Quick,就需要 import QtQuick 2。QML 是一种声明语言,用于描述程序界面。QML 将用户界面分解成一块块小的元素,每一元素都由很多组件构成。QML 定义了用户界面元素的外观和行为;更复杂的逻辑则可以结合 JavaScript 脚本实现。这有点类似于 HTML 和 JavaScript 的关系,前者用来显示界面,后者用来定义行为。
-
// rectangle.qml
-
import QtQuick 2.0
-
// 根元素:Rectangle
-
Rectangle {
-
// 命名根元素
-
id: root // 声明属性::
-
width: 120; height: 240
-
color: “#D8D8D8” // 颜色属性
-
// 声明一个嵌套元素(根元素的子元素)
-
Image {
-
id: rocket
-
x: (parent.width - width)/2; y: 40 // 使用 parent 引用父元素
-
source: ‘assets/rocket.png’
-
}
-
// 根元素的另一个子元素
-
Text {
-
// 该元素未命名
-
y: rocket.y + rocket.height + 20 // 使用 id 引用元素
-
width: root.width // 使用 id 引用元素
-
horizontalAlignment: Text.AlignHCenter
-
text: ‘Rocket’
-
}
-
}
-
Text {
-
// (1) 标识符
-
id: thisLabel
-
// (2) x、y 坐标
-
x: 24; y: 16
-
// (3) 绑定
-
height: 2 * width
-
// (4) 自定义属性
-
property int times: 24
-
// (5) 属性别名
-
property alias anotherTimes: times
-
// (6) 文本和值
-
text: "Greetings " + times
-
// (7) 字体属性组
-
font.family: “Ubuntu”
-
font.pixelSize: 24
-
// (8) 附加属性 KeyNavigation
-
KeyNavigation.tab: otherLabel
-
// (9) 属性值改变的信号处理回调
-
onHeightChanged: console.log(‘height:’, height)
-
// 接收键盘事件需要设置 focus
-
focus: true
-
// 根据 focus 值改变颜色
-
color: