当我使用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。
任何人都知道该怎么做?我疯了。
答案 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");