我们说我有一个 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
变量,当true
的信号为CustomWidget onCompleted
时,该变量将被设置为string FileName = "C:\\Sales.docx";
object ConfirmConversions = false;
object Link = false;
object Attachment = false;
bookmark1.InsertFile(FileName, ref missing, ref ConfirmConversions, ref Link, ref Attachment);
过度。另一个信号会循环等待。
答案 0 :(得分:2)
正如@BaCaRoZzo已经注意到,假设项目初始化与视觉初始化顺序相同,则不应构建应用程序逻辑。相反,你可以这样做:
<强> CustomWidget.qml 强>
Item {
signal initialized()
Component.onCompleted: {
// execute some code here
initialized()
}
}
<强> main.qml 强>
Item {
id: itemId
CustomWidget {
onInitialized: {
// execute some secondary initialization
}
}
}