从文本中动态实例化项(Dynamically Instantiating Items from Text)

有时,可以很方便的从QML文本字符串中实例化一个对象。别的不说,这比将代码从源文件中分离后拿出来快。为了实现这个功能,需要使用Qt.createQmlObject函数。

这个函数接受三个参数:qml,parent和filepath。qml参数包含了用来实例化的QML代码字符串。parent参数为新创建的对象提供了一个父对象。filepath参数用于存储创建对象时的错误报告。这个函数的结果返回一个新的对象或者一个NULL。

警告

createQmlObject函数通常会立即返回结果。为了成功调用这个函数,所有的依赖调用需要保证已经被加载。这意味着如果函数调用了未加载的组件,这个调用就会失败并且返回null。为了更好的处理这个问题,必须使用createComponent/createObject方法。

使用Qt.createQmlObject函数创建对象与其它的动态创建对象类似。这说明与其它创建的QML对象一样,也没有id。在下面的例子中,当根元素创建完成后,从内联QML代码中实例化了一个新的矩形元素(Rectangle element)。

  1. import QtQuick 2.0
  2. Item {
  3. id: root
  4. width: 1024
  5. height: 600
  6. function createItem() {
  7. Qt.createQmlObject("import QtQuick 2.0; Rectangle { x: 100; y: 100; width: 100;
  8. height:100; color: \"blue\" }", root, "dynamicItem");
  9. }
  10. Component.onCompleted: root.createItem();
  11. }