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

beh*_*god 3 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

我只是想找到一个QML文件并在应用程序执行时动态加载它,以便应用程序可以根据用户操作加载不同的QML.

谁知道怎么做?我要疯了.

Mit*_*tch 5

Qt.createComponent()将a url作为其第一个参数.从url文档:

url类型引用资源定位符(例如,文件名).它可以是绝对的,例如" http://qt-project.org ",也可以是相对的,例如"pics/logo.png".相对URL相对于包含组件的URL进行解析.

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

var component = Qt.createComponent("qrc:/MyPage.qml");
Run Code Online (Sandbox Code Playgroud)

  • 我的印象是OP希望最终用户能够选择一个QML文件......我猜错了. (2认同)
  • 谢谢你们.我很抱歉我的英语太弱而无法表达清楚. (2认同)