在Qt 5.3中,我一直在使用Loader
QML元素加载屏幕,在后台从QML文件加载视图。现在我正在尝试动态加载字符串的QML 。 Qt.createQmlObject
使我能够这样做,但我似乎无法让Loader
元素发挥作用。
似乎Loader
只需要一个网址(QUrl
)或组件(QQmlComponent
),但Qt.createQmlObject
会创建一个对象(QObject
)。
我是QML的新手,但从我的理解组件是可重用的元素,类似于类,对象是这些类的实例。因此,我似乎无法理解为什么Loader
无法使用对象。
如何在(异步)解析和初始化QML字符串时显示加载屏幕?
示例QML代码:
Item {
Rectangle {id: content}
Loader {id: loader}
Component.onCompleted: {
var obj = Qt.createQmlObject('import QtQuick 2.3; Rectangle {}', content);
loader.source = obj; // Throws error.
}
}
答案 0 :(得分:1)
使用当前的API无法实现。正如Loader的文档所说,它通过指向QML文件或组件的URL加载对象:
import QtQuick 2.0
Item {
Rectangle {
id: content
anchors.fill: parent
color: "grey"
Loader {
id: loader
sourceComponent: myComponent
anchors.fill: parent
anchors.margins: 40
}
}
property Component myComponent: Qt.createComponent("MyComponent.qml", Component.Asynchronous)
}
<强> MyComponent.qml:强>
import QtQuick 2.2
Rectangle {
color: "red"
}