Qt 对QML字符串使用加载程序
在Qt5.3中,我一直在使用QML元素加载屏幕,从后台的QML文件加载视图。现在我尝试动态加载QML的字符串。使我能够这样做,但我似乎无法让Qt 对QML字符串使用加载程序,qt,asynchronous,qml,Qt,Asynchronous,Qml,在Qt5.3中,我一直在使用QML元素加载屏幕,从后台的QML文件加载视图。现在我尝试动态加载QML的字符串。使我能够这样做,但我似乎无法让加载程序元素发挥作用 似乎Loader只接受URL(qrl)或组件(QQmlComponent),但Qt.createQmlObject创建对象(QObject) 我是QML新手,但据我所知,组件是可重用的元素,类似于类,对象是这些类的实例。因此,我似乎无法理解为什么Loader不能处理对象 在(异步)解析和初始化QML字符串时,如何显示加载屏幕 QML代码
加载程序
元素发挥作用
似乎Loader
只接受URL(qrl
)或组件(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.
}
}
使用当前的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"
}
嗨,米奇,谢谢你的来电。虽然这是一个很好的
加载程序
加载QML文件的示例,但实际上我正在寻找一种方法将加载程序
应用于QML字符串。换句话说:有什么方法可以做Qt.createComponent(QString)
而不是Qt.createComponent(QUrl)
?没有,这就是我的答案。我已经更新了它。不过,应该有一些方法可以异步加载QML的字符串。也许我需要编写一个加载程序子类。不管怎样,谢谢你的意见,米奇。不用担心。您可能还想在bugreports.qt-project.org上为此创建一个建议。祝您好运。我刚刚创建了一个: