qt qml 类型之Keys


Keys 类是 Qt Quick 提供的,专门供 Item 处理按键事件的类。它定义了很多针对特定按键的信号,比如 onReturnPressed / onEscapePressed / onDownPressed / onDigit0Pressed / onBackPressed 等等;它还定义了更为普通的 onPressed 和 onReleased 信号,一般地,你可以使用这两个信号来处理大部分按键,它们有一个名字是 event 的 KeyEvent 参数,包含了按键的详细信息。

KeyEvent 代表一个按键事件,如果一个按键被处理, event.accepted 应该被设置为 true 以免它被继续传递;要是你不设置它,那它可能会继续传递给其他的 item ,出现一些奇奇怪怪的问题。


例子:

Item {

    anchors.fill: parent
    focus: true
    Keys.onPressed: {//其实,Keys是作为的附加属性,利用附加属性来处理按键信息。我理解为Keys是Item的一个成员!
        if (event.key == Qt.Key_Left) {
            console.log("move left");
            event.accepted = true;
        }
    }
}

我尝试过Keys.onPressed 和Keys.onReleased通过使用,例如用来检测键盘的空格按键,一个问题:快速地按一下空格键,会先自动调用onPressed,然后马上自动调用onReleased,蛋疼!而且,如果你按住空格键不松开的话,按常理这时应该只是发出了pressed信号吧,但是,一直会循环往复地自动执行这两个槽函数,直至天荒地老!难道,设计Keys类的QT公司的人就是这样写的,还没看源码。  尝试过,通过调用write()函数,向键盘对用的文件设备仅仅写一个空格键被按下的事件,这时,这两个槽函数都会被执行!     尝试过,通过调用write()函数,向键盘对用的文件设备仅仅写一个空格键被松开的事件,这时,这两个槽函数都会被执行!  尝试了使用Keys.onSpacePressed,同样的现象!
  
QT文档中,在将Keys类时,有一段介绍Key Handling Priorities的话:
The Keys attached property can be configured to handle key events before or after the item it is attached to. This makes it possible to intercept events in order to override an item's default behavior, or act as a fallback for keys not handled by the item.
If priority is Keys.BeforeItem (default) the order of key event processing is:
1)Items specified in forwardTo
2)specific key handlers, e.g. onReturnPressed
3)onPressed, onReleased handlers   //看起来像是onReleased()总是会自动执行!
4)Item specific key handling, e.g. TextInput key handling
5)parent item

  

转载于:https://www.cnblogs.com/butterflybay/p/10347958.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值