有没有办法在QML中创建自定义属性?例如:
property required int numRows
我想强制组件的用户传递某个属性,因为没有它,该组件将无法工作。
答案 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,取决于你的用例。
当然,根据您的需要,有几种方法可以做。