0

有什么方法可以制作 QML 中所需的自定义属性吗?例如,类似:

property required int numRows

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

4

3 回答 3

6

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

required property <propertyType> <propertyName>

感谢 Marcin Orlowski 的更新

于 2020-06-08T10:37:18.293 回答
2

不,你不能。最可靠的方法是简单地为属性提供一个有效的默认值。

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

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

于 2013-07-30T22:35:32.310 回答
0

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

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

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
  }
}

然后您可以通过启动它而不是创建它来调用它,这可能适用于可重用的对话框,具体取决于您的用例。

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

于 2015-05-04T05:57:58.347 回答