【问题标题】:Is the order of function calls during QML object initialization deterministic?QML 对象初始化期间函数调用的顺序是否确定?
【发布时间】:2014-07-29 15:12:37
【问题描述】:

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

MyCustomThing {
   propertyA: 20   // Will putting this line first guarantee A before B?
   propertyB: 30
}

在我的机器上,事情发生的顺序与我期望的相反(在这种情况下,B 在 A 之前,即 QML 中最后出现的任何东西都是第一个被调用的东西),但很高兴知道这是否一致平台 - 理想情况下记录在某处。

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

谢谢!

【问题讨论】:

  • 代码注释中的“宽度”是什么意思?
  • 打错字了,抱歉。感谢您找到它,我已经编辑了

标签: c++ qt qml


【解决方案1】:

propertyApropertyB 都设置为您的 qml 文件中声明的值时,我假设您想做一些事情。

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

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

编辑: QML 等效项是:

MyCustomThing {
    propertyA: 20
    propertyB: 30
    Component.onCompleted: {
        myCustomInit(propertyA, propertyB); // 20, 30
    }
}

【讨论】:

    【解决方案2】:

    顺序是未定义的,你不应该依赖它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-19
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      相关资源
      最近更新 更多