当我使用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()
}
}
如果qrc
文件中不存在MyPage.qml
,则错误为
独有:/MyPage。qml:-1 File not found"
如果我设置MyPage.qml
的全路径,我得到一个Network error
。
当我将SeriesSelectionPage.qml
文件添加到资源文件时,它可以工作。但它不应该是动态的吗?
我只想找到一个QML文件,并在应用程序执行时动态加载它,以便应用程序可以根据用户操作加载不同的QML。
有人知道怎么做吗?我要疯了
Qt.createComponent()
以url
作为其第一个参数。url
文档:
url类型引用资源定位符(例如,像文件名)。它可以是绝对的,例如:"http://qt-project.org"或"亲戚",例如:"图片/logo.png"。相对URL是相对于包含组件的URL进行解析的。
因此,只要您在从QRC
文件加载的文件中使用相对url,您就需要使用qrc
方案:
var component = Qt.createComponent("qrc:/MyPage.qml");