Qt没有创建组件并且不会返回错误

时间:2014-07-21 17:33:19

标签: javascript qt qt-quick

我正在尝试使用QT动态创建元素,但它不起作用并且不会打印错误消息。 Compoenent.Status从未准备好。它甚至没有进入Compoenet.Error阶段:(

Component.onCompleted: {
                var Component = Qt.createComponent("parts/Column.qml");
                console.log(Component.errorString());

Column.qml基本上包含ColumnLayout元素。我做错了什么?

1 个答案:

答案 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());
    }
}