javascript - Qt 不创建组件并且不返回错误

标签 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 元素。我做错了什么?

最佳答案

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

关于javascript - Qt 不创建组件并且不返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24871203/

相关文章:

javascript - 如何使用变量值作为正则表达式模式

javascript - 类型错误 : undefined is not a function in Angular Resource

javascript - 将元素设置为父元素

c++ - 融合样式不适用于 QTabWidget 中的 QTextBrowser

qt - 更改 QML ListView 的模型不会更改相应的委托(delegate)

javascript - 不在 View 中时绝对固定在 View 中

c++ - 如何自动对 QTreeWidget 列进行排序?

c++ - 树莓派的 qmake 条件

c++ - 使用 QML 创建 curses 应用程序