使用Loader作为一串QML

时间:2014-06-07 16:09:52

标签: qt asynchronous qml

在Qt 5.3中,我一直在使用Loader QML元素加载屏幕,在后台从QML文件加载视图。现在我正在尝试动态加载字符串的QML Qt.createQmlObject使我能够这样做,但我似乎无法让Loader元素发挥作用。

似乎Loader只需要一个网址(QUrl)或组件(QQmlComponent),但Qt.createQmlObject会创建一个对象(QObject)。

我是QML的新手,但从我的理解组件是可重用的元素,类似于类,对象是这些类的实例。因此,我似乎无法理解为什么Loader无法使用对象。

如何在(异步)解析和初始化QML字符串时显示加载屏幕?

示例QML代码:

Item {
    Rectangle {id: content}

    Loader {id: loader}

    Component.onCompleted: {
        var obj = Qt.createQmlObject('import QtQuick 2.3; Rectangle {}', content);

        loader.source = obj; // Throws error.
    }
}

1 个答案:

答案 0 :(得分:1)

使用当前的API无法实现。正如Loader的文档所说,它通过指向QML文件或组件的URL加载对象:

import QtQuick 2.0

Item {
    Rectangle {
        id: content
        anchors.fill: parent
        color: "grey"

        Loader {
            id: loader
            sourceComponent: myComponent
            anchors.fill: parent
            anchors.margins: 40
        }
    }

    property Component myComponent: Qt.createComponent("MyComponent.qml", Component.Asynchronous)
}

<强> MyComponent.qml:

import QtQuick 2.2

Rectangle {
   color: "red"
}