假设我有一个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
}
}
}