QML - 必需的自定义属性

时间:2013-07-30 15:31:02

标签: qml

有没有办法在QML中创建自定义属性?例如:

property required int numRows

我想强制组件的用户传递某个属性,因为没有它,该组件将无法工作。

3 个答案:

答案 0 :(得分:3)

在qml中添加了一个必需的选项:qt doc。 语法如下:

required property <propertyType> <propertyName>

答案 1 :(得分:2)

不,你不能。最强大的方法是为属性提供有效的默认值。

解决方法可能是提供无效值(例如-1)并检查项目的Component.onCompleted槽中的值,如果属性无效,则显示console.log ...

但更喜欢第一种方式,对于可重用性目标,组件应始终可以使用默认值!

答案 2 :(得分:0)

Qt巨魔告诉自己,Component.onCompleted不是做大多数事情的首选方式,而是必须实施的黑客攻击。

最好的方法是使用声明式启动器,这样的事情是理想的:

MyItem{
  property int myvalue: -1
  enabled: myvalue != -1  // Use other number if neccesary
}

这可以用于启用交互式元素,但更有趣的东西可以像:

MyItem{
  property int myvalue: -1
  onMyvalueChanged:{
      enabled = true
      callMyInitFunction(something)
  }
}

当用户更改值时会触发,然后您可以调用其他函数或初始值设定项。如果你只想初始化一次,你可以检查它是否被禁用。

MyItem{
  property int myvalue: -1
  onMyvalueChanged:{
      if (!enabled){
        enabled = true
        callMyInitFunction(something)
        return
      }
      // Stuff to do of already initialized
      callOtherStuff(otherThing)
  }
}

最后,通过阅读你写的单词“传递某个属性”,你似乎可以为对象创建一个javascript函数并调用它。

MyItem{
 property int _myprop: 0
 function launch(param1, param2, param3){
    _myprop = param3
    // do stuff
  }
}

然后你会通过启动而不是创建它来调用它,这可能适用于可重用的Dialog,取决于你的用例。

当然,根据您的需要,有几种方法可以做。