标签(空格分隔): Qt
import QtQuick 2.0
import QtQuick.Controls 2.2
Rectangle {
width: 320;
height: 480;
color: "grey";
focus: true;
Keys.enabled: true;
Keys.onEscapePressed: {
Qt.quit();
}
Keys.forwardTo: [moveText,likeQt];//转发给id为moveText的Text对象和id为likeQt的Checkbox对象,moveText在前面,如果它消耗掉某个键,likeQt就收不到了
Text {
id: moveText;
x: 20;
y: 20;
width: 200;
height: 30;
text: "Moving Text";
color: "blue";
font {bold: true;pixelSize: 24}
Keys.enabled: true;
Keys.onPressed: {
switch(event.key){
case Qt.Key_Left:
x -= 10;
break;
case Qt.Key_Right:
x += 10;
break;
case Qt.Key_Down:
y += 10;
break;
case Qt.Key_Up:
y -= 10;
break;
default:
return;
}
event.accepted = true;
}
}
CheckBox{
id: likeQt;
text: "Like Qt Quick";
anchors.left: parent.left;
anchors.leftMargin: 10;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 10;
z:1;
}
}
这个示例通过上、下、左、右4个按键移动一个文本串,按空格键选中复选框,按Esc键退出应用。
Key对象与信号处理器
Keys对象是Qt Quick 提供的,专门提供item处理按键事件的对象。它定义了很多针对特定按键的信号,比如returnPressed、escapePressed、downPressed、digit0Pressed、backPressed等;它还定义了更为普通的pressed和released信号。一般地,你可以使用这两个信号来处理大部分按键,它们有一个名字是event、类型是KeyEvent的参数,包含了按键的详细信息。
KeysEvent代表一个按键事件,如果一个按键被处理,event.accepted应该被设置成true,以免它被继续传递,要是你不设置它,那它有可能会继续传递给其他的Item,出现一些奇怪的问题。
Keys有三个属性。
enabled属性控制是否处理按键。
forwardTo属性是列表类型,它表示传递按键事件给列表内的对象,如果某个对象accept了某个按键,那位列其后的对象就不会收到该按键事件。
priority属性允许你设置Keys附加属性的优先级,有两种:在Item之前处理按键(默认行为)、在Item之后处理按键。
Qt Quick提供的一些元素本身会处理按键,比如示例中的CheckBox,它响应空格键来选中或取消选中复选框,而我们不需要给它附加Keys对象来再次处理按键事件。
网友评论