欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第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赋值清零) , 类似于这个例⼦, 你最好不要使⽤绑定属性。 你需要使⽤赋值的⽅式来改变属性, 属性绑定会在赋值操作后被销毁(销毁协议!)