qml详解

本文详细介绍了如何在Qt中将QML嵌入到QWidget,包括QQmlApplicationEngine、QQuickView和QQuickWidget三种方式。接着,探讨了QML语言的基础,如声明式语法、属性、定位器、输入元素和动态视图。还涵盖了QML中的视图代理、模型-视图高级技术,如PathView、XML模型加载和分组列表。最后,提到了Canvas和粒子系统在Qt Quick中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QWidget嵌入Qml文件

image.png

第一种 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 的关系,前者用来显示界面,后者用来定义行为。

  1. // rectangle.qml

  2. import QtQuick 2.0

  3. // 根元素:Rectangle

  4. Rectangle {

  5. // 命名根元素

  6. id: root // 声明属性::

  7. width: 120; height: 240

  8. color: “#D8D8D8” // 颜色属性

  9. // 声明一个嵌套元素(根元素的子元素)

  10. Image {

  11. id: rocket

  12. x: (parent.width - width)/2; y: 40 // 使用 parent 引用父元素

  13. source: ‘assets/rocket.png’

  14. }

  15. // 根元素的另一个子元素

  16. Text {

  17. // 该元素未命名

  18. y: rocket.y + rocket.height + 20 // 使用 id 引用元素

  19. width: root.width // 使用 id 引用元素

  20. horizontalAlignment: Text.AlignHCenter

  21. text: ‘Rocket’

  22. }

  23. }

  24. Text {

  25. // (1) 标识符

  26. id: thisLabel

  27. // (2) x、y 坐标

  28. x: 24; y: 16

  29. // (3) 绑定

  30. height: 2 * width

  31. // (4) 自定义属性

  32. property int times: 24

  33. // (5) 属性别名

  34. property alias anotherTimes: times

  35. // (6) 文本和值

  36. text: "Greetings " + times

  37. // (7) 字体属性组

  38. font.family: “Ubuntu”

  39. font.pixelSize: 24

  40. // (8) 附加属性 KeyNavigation

  41. KeyNavigation.tab: otherLabel

  42. // (9) 属性值改变的信号处理回调

  43. onHeightChanged: console.log(‘height:’, height)

  44. // 接收键盘事件需要设置 focus

  45. focus: true

  46. // 根据 focus 值改变颜色

  47. color:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值