text: "add 1" onClicked: { var objc = { "x": 15, "y": 15, "imgsrc": "qrc:/tire_normal.png"}; addOrRemove(true, objc) console.log("111") Button { text: "add 2" onClicked: { var objc = { "x": 100, "y": 100, "imgsrc": "qrc:/WarnDoorBg.png"}; addOrRemove(true, objc) Button { text: "remove 1" onClicked: { addOrRemove(false, null); //instances[0].destroy(); Rectangle{ id: rect clip: true color: "yellow" width: 300 height: 300 function addOrRemove(add, objdata) { if (add) { var imgComponent = Qt.createComponent("qrc:/River.qml"); let instance = weirdShapeComponent.createObject(rect, objdata); instances.push(instance); } else { let instance = instances.pop(); instance.destroy(); Components(组件) Component 是由 Qt 框架或开发者封装好的、只暴露了必要接口的 QML 类型,可以重复利用。一个 QML 组件就像一个黑盒子,它通过属性、信号、函数和外部世界交互。 一个 Component 即可以定义在独立的 qml 文件中,也可以嵌入到其它的 qml 文档中来定义。通常我们可以根据这个原则来选择将一个 Component 定义在哪里:如果一... 1. 使用Component在 QML 中嵌入组件 Component是Qt框架或者开发者封装好的、只暴露必要接口的 QML 类型,可以重复使用。要再 QML 中嵌入Comp... QML 支持在JavaScript中 动态 创建 对象。这有助于将对象的实例化推迟到必要的时候,从而提高应用程序的启动时间。它还允许 动态 创建 可视对象,并根据用户输入或其他事件将其添加到场景中。 动态 创建 用的场景是非常的多。有些组件在时间线上不是同时 创建 的,同时就像弹窗一样,有些组件其实是在运行的时候 创建 一会儿,就销毁掉了。 QML 不仅仅是一个UI描述语言,它还是一个完整的应用程序开发框架。与传统的UI开发工具相比, QML 提供了更高的灵活性和 动态 性。例如,你可以在运行时更改界面的布局、样式和行为,而无需重新编译整个应用程序。 正如《C++编程思想》中所说:“一个好的工具不仅可以帮助你完成任务,还可以激发你的创造力。” QML 正是这样一个工具,它鼓励开发者思考如何创造出更加人性化和高效的用户界面。 虽然 QML 的界面定义非常灵活,但是我们在开发应用的时候也是有固定套路的。下面介绍一下 QML 应用的几种固定模式,分别是:SwipeView、StackView、DocumentWindow。SwipeView窗口是一种可以通过鼠标或者手指左右滑动来实现窗口切换的视图结构,常见于移动端应用。StackView是一种堆叠层次的窗口结构,用户可以通过按键和菜单的响应操作,切换堆叠结构中的