Keys 类是 Qt Quick 提供的,专门供 Item 处理按键事件的类。它定义了很多针对特定按键的信号,比如 onReturnPressed / onEscapePressed / onDownPressed / onDigit0Pressed / onBackPressed 等等;它还定义了更为普通的 onPressed 和 onReleased 信号,一般地,你可以使用这两个信号来处理大部分按键,它们有一个名字是 event 的 KeyEvent 参数,包含了按键的详细信息。
import QtQuick 2.15
import QtQuick.Window 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Rectangle{
anchors.fill: parent
focus:true
Keys.enabled: true
Keys.onReturnPressed: Qt.quit()
Keys.onEscapePressed: Qt.quit()
Keys.onPressed: {
switch(event.key){
case Qt.Key_0:
case Qt.Key_1:
case Qt.Key_2:
case Qt.Key_3:
case Qt.Key_4:
case Qt.Key_5:
case Qt.Key_6:
case Qt.Key_7:
case Qt.Key_8:
case Qt.Key_9:
event.accepted=true
name.text=event.key-Qt.Key_0
break
}
}
Text {
id: name
text: qsTr("text")
}
}
}
1.在使用按键事件的组件元素中必须设置其focus:true
2.当一个焦点获取到了按键事件并且处理后,我们应该把设置event.accepted = true。这条语句的
作用就是防止事件向上层传递也就是向父层传递,即使父对象的focus没有设置为ture;要是你不设置它,那它可能会继续传递给其他的 item ,出现一些奇奇怪怪的问题。
3.设置Keys.enabled=true,当设置为false不能响应按键事件,影响的只是当前QML对象。Keys的enabled不同于Item的enabled,后者默认为true,为false时按键事件和鼠标事件都不能响应,影响的是当前对象及所有孩子对象,这一点在使用是需要特别注意。
event.key 指代键盘按下的键
Qt.Key_0 对应48 Qt.Key_1 对应49 以此类推