嵌套的 QML 元素在已完成的信号上不阻止 QML 对象的实例化



假设我有一个main.qml文件:

import CustomWidgets 1.0
Item
{
    id: itemId
    anchors.fill: parent
    CustomWidget {}
    Component.onCompleted: // c++ function call
}

包括来自另一个名为 CustomWidget.qml 的文件的CustomWidget

Item
{
    id: customWidgetId
    anchors.fill: parent
    // attributes    
    Component.onCompleted: // c++ function call
}

从逻辑上讲,CustomWidget onCompleted的信号在主信号之前被调用。但从我所看到的情况来看,它不是阻塞,这意味着 QML 对象的实例化仍在继续。

有没有办法防止这种情况或其他方法?我的第一个onCompleted信号输入了一些数据,然后在第二个信号中访问这些数据。由于当前处理信号的这种方式,我的应用程序在尝试访问不存在的数据(尚未初始化)时崩溃。

编辑:我想我可以添加一个简单的bool变量,当CustomWidget onCompleted的信号结束时设置为true。另一个信号将循环等待。

正如@BaCaRoZzo已经注意到的那样,您不应该基于项目初始化与视觉初始化相同的顺序来构建应用逻辑。相反,您可以执行以下操作:

CustomWidget.qml

Item {
    signal initialized()
    Component.onCompleted: {
        // execute some code here
        initialized()
    }
}

主.qml

Item {
    id: itemId
    CustomWidget {
        onInitialized: {
            // execute some secondary initialization
        }
    }
}

最新更新