乐趣区

Qml组件小知识

介绍组件构造,销毁,动态加载小知识。

对象 / 组件都具有类似 C ++ 的构造函数和析构函数

  • onCompleted 对象构造完成自动执行;
  • onDestruction 对象销毁前自动执行。
QtObject {Component.onCompleted: console.log("Completed")
    Component.onDestruction: console.log("Destruction")
}

使用 Loader 加载组件

  • Component 必须具有子空间才能实例化;
  • onProgressChanged 可以获取到组件的加载进度。
Component {
    id: component
    Text {text: "Component"}
}

Loader {
    sourceComponent: component
    onProgressChanged: console.log(progress)
}

动态加载 Qml 组件 (1)

  • 原型:
  1. qml 为 qml 组件描述语句;
  2. parent 为依附于那个父类控件;
  3. filepath 为重定向到文件的加载过程中的错误报告
object createQmlObject(qml, 
                       object parent, 
                       string filepath)
  • 例子
var object = Qt.createQmlObject('import QtQuick 2.0; Rectangle {color:"blue"; width: 50; height: 50}',
                                   root,
                                   "error.txt");

动态加载 Qml 组件 (2)

  • 原型:
  1. url 为 qml 文件 (还可以加载网络 qml 文件);
  2. mode 为创建 qml 的模式 (同步或异步);
  3. parent 指定某个控件为父类控件;
  4. object 为附加属性。
object createComponent(url, mode, parent)
object createObject(parent, object properties)
  • 示例:
var component = Qt.createComponent("MyComponent.qml");
if (component.status == Component.Ready)
    component.createObject(parent, {x: 100, y: 100});
退出移动版