有什么方法可以制作 QML 中所需的自定义属性吗?例如,类似:
property required int numRows
我想强制组件的用户传递某个属性,因为没有它组件将无法工作。
在 QT 5.15 qml: qt doc中添加了一个必需的选项。语法如下:
required property <propertyType> <propertyName>
感谢 Marcin Orlowski 的更新
不,你不能。最可靠的方法是简单地为属性提供一个有效的默认值。
一种解决方法可能是提供无效值(例如 -1)并检查项目的 Component.onCompleted 插槽中的值,如果属性无效则显示 console.log...
但更喜欢第一种方式,组件应该始终可以使用默认值,以实现可重用性目标!
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
}
}
然后您可以通过启动它而不是创建它来调用它,这可能适用于可重用的对话框,具体取决于您的用例。
当然,根据您的需要,有几种方法可以做事。