4

当我使用Qt.createComponent动态创建组件时,状态总是Component.error但我无法理解原因。

我是这样使用它的:

Rectangle{
    function loadTest(){
        function finishCreation() {
            if (component.status === Component.Ready) {
                console.log("ready")
            } else if (component.status === Component.Error) {
                // Error Handling
                console.log("Error loading component:", component.errorString());
            }
        }

        var component = Qt.createComponent("MyPage.qml");
        console.log(component.status)
        console.log("Error loading component:", component.errorString());
        component.statusChanged.connect(finishCreation);

        if (component.status === Component.Ready) {
            var button = component.createObject(container);
            console.log("ready")
        }
    }

    Component.onCompleted: {
        console.log("Completed Running!")
        loadTest()
    }
}

如果文件MyPage.qml中不存在qrc,则错误为

qrc:/MyPage.qml:-1 找不到文件”

如果我设置 的完整路径MyPage.qml,我会得到一个Network error.

当我将SeriesSelectionPage.qml文件添加到资源文件时,它可以工作。但它不应该是动态的吗?

我只是想找一个QML文件,在应用执行的时候动态加载,这样应用就可以根据用户操作加载不同的QML。

有谁知道该怎么做?我要疯了。

4

1 回答 1

5

Qt.createComponent()将 aurl作为第一个参数。从url文档中:

url 类型指的是资源定位器(例如文件名)。它可以是绝对的,例如“ http://qt-project.org ”,也可以是相对的,例如“pics/logo.png”。相对 URL 是相对于包含组件的 URL 解析的。

因此,只要您在从文件加载的文件中使用相对 URL QRC,您就需要使用该qrc方案:

var component = Qt.createComponent("qrc:/MyPage.qml");
于 2015-09-15T17:29:11.520 回答