24--Qt Quick事件处理---鼠标-会动的文本实例

标签(空格分隔): 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对象来再次处理按键事件。

你可能感兴趣的:(24--Qt Quick事件处理---鼠标-会动的文本实例)