第6篇 基础(六)QML语法 之 脚本
程序员文章站
2022-03-09 15:24:14
...
在此简单的介绍一下关系描述:(部分代码,不能运行)
Text {
id: label
text: "Space pressed:"+ spacePressed +" times"
onTextChanged: console.log("text changed to:",text)
focus: true
Keys.onSpacePressed: {
increment()
}
Keys.onEscapePressed: {
label.text = ''
}
function increment() {
spacePressed = spacePressed + 1
}
}
(1)⽂本改变操作onTextChanged会将每次空格键按下导致的⽂本改变输出到控制台。
(2)当⽂本元素接收到空格键操作(⽤户在键盘上点击空格键) , 会调⽤JavaScript函数increment()。
(3)定义⼀个JavaScript函数使⽤这种格式function (){....}, 在这个例⼦中是增加spacePressed的计数。 每次spacePressed的增加都会导致它绑定的属性更新。
QML的: (属性绑定) 与JavaScript的=(赋值) 是不同的。 绑定是⼀个协议, 并且存在于整个⽣命周期。 然⽽JavaScript赋值(=) 只会产⽣⼀次效果。 当⼀个新的绑定⽣效或者使⽤JavaScript赋值给属性时, 绑定的⽣命周期就会结束。 例如⼀个按键的操作设置⽂本属性为⼀个空的字符串将会销毁,我们的增值显⽰:
Keys.onEscapePressed: {
label.text = ''
}
在点击取消(ESC) 后, 再次点击空格键(space-bar) 将不会更新我们的显⽰, 之前的text属性绑定(text: "Space pressed:" + spacePresses +"times")被销毁。
当你对改变属性的策略有冲突时(⽂本的改变基于⼀个增值的绑定并且可以被JavaScript赋值清零) , 类似于这个例⼦, 你最好不要使⽤绑定属性。 你需要使⽤赋值的⽅式来改变属性, 属性绑定会在赋值操作后被销毁(销毁协议!)
推荐阅读