QML对象初始化期间函数调用的顺序是否确定?

spb*_*ots 2 c++ qt qml

我有一个QML的C++插件,它有一些属性,我想知道是否有一些文档关于在下面的QML代码中调用函数的顺序:

MyCustomThing {
   propertyA: 20   // Will putting this line first guarantee A before B?
   propertyB: 30
}
Run Code Online (Sandbox Code Playgroud)

在我的机器上,事情以我期望的相反顺序发生(在这种情况下B在A之前,即在QML中最后出现的内容是调用的第一件事),但是知道这是否在不同平台上是一致的会很好 - 并且理想的记录在某处.

是否有任何文档指定QML对象构造期间函数调用的顺序?

谢谢!

ser*_*rgk 5

我假设您想要在两者都做某事propertyA并将propertyB其设置为qml文件中声明的值.

您可以覆盖QQuickItem :: componentComplete.当所有属性都设置为初始值时,将调用它.只是不要忘记在重写方法的开头调用超类.

void MyCustomThingItem::componentComplete()
{
    QQuickItem::componentComplete();
    // continue initialization 
    myCustomInit(m_propertyA, m_propertyB); // guaranteed to be 20 and 30
}
Run Code Online (Sandbox Code Playgroud)

编辑:QML等价物将是:

MyCustomThing {
    propertyA: 20
    propertyB: 30
    Component.onCompleted: {
        myCustomInit(propertyA, propertyB); // 20, 30
    }
}
Run Code Online (Sandbox Code Playgroud)