我正在尝试使用QT动态创建元素,但它不起作用并且不会打印错误消息。 Compoenent.Status从未准备好。它甚至没有进入Compoenet.Error阶段:(
Component.onCompleted: {
var Component = Qt.createComponent("parts/Column.qml");
console.log(Component.errorString());
Column.qml基本上包含ColumnLayout元素。我做错了什么?
答案 0 :(得分:1)
在QML中动态创建组件是一个多步骤过程。调用Qt.createComponent()只是第一步。 documentation on this process详细介绍了一下。
在许多简单的情况下,组件会立即加载,您可以这样做:
// Create our Component
var myComponent = Qt.createComponent("foobar.qml");
// Instantiate the Component's object, give it a parent, and set its properties
var foobar = myComponent.createObject(parentObject, {"x": 0, "y": 0});
但在更复杂的情况下,您必须附加到组件的statusChanged信号。上面的文档中有一个完整的例子,我已将其复制并粘贴在此处以供参考:
var component;
var sprite;
function createSpriteObjects() {
component = Qt.createComponent("Sprite.qml");
if (component.status == Component.Ready)
finishCreation();
else
component.statusChanged.connect(finishCreation);
}
function finishCreation() {
if (component.status == Component.Ready) {
sprite = component.createObject(appWindow, {"x": 100, "y": 100});
if (sprite == null) {
// Error Handling
console.log("Error creating object");
}
} else if (component.status == Component.Error) {
// Error Handling
console.log("Error loading component:", component.errorString());
}
}