在qml中使用createComponent,但状态始终为error

时间:2015-09-15 17:07:03

标签: qt qml qtquick2 qqmlcomponent

当我使用Qt.createComponent动态创建组件时,stutas总是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。

任何人都知道该怎么做?我疯了。

1 个答案:

答案 0 :(得分:5)

Qt.createComponent()url作为其第一个参数。来自url documentation

  

url类型是指资源定位器(例如文件名)。它可以是绝对的,例如" http://qt-project.org"或相对的,例如"图片/ logo.png&#34 ;.相对URL相对于包含组件的URL进行解析。

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

var component = Qt.createComponent("qrc:/MyPage.qml");