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
  

qt qml 类型之Keys的更多相关文章

  1. Qt5 QtQuick系列----QtQuick的Secne Graph剖析(2)--自定义QML类型 (继承QQuickItem)

    "当下即永恒"  --- 佚名 Qt用户可以方便地使用QML中的Rectangle等基本类型,但是当不够用时,或,需要开发更高级的界面时,可以自己定义QML类型. 自定义QML类型 ...

  2. Qt QML Component 学习笔记

    简介 Component是Qt封装好的.只暴露必要接口的QML类型,可以重复利用.一个QML组件就像一个黑盒子,它通过属性.信号.函数和外部世界交互. 一个Component既可以定义在独立的QML文 ...

  3. QT QML 3D模型查看器

    原文链接:http://amin-ahmadi.com/2018/01/28/viewing-3d-models-using-qt/ 本文使用QT Quick中的Scene3D QML类型来查看3D模 ...

  4. Qt QML referenceexamples attached Demo hacking

    /********************************************************************************************* * Qt ...

  5. Qt qml的软件架构设计

    google: qt qml application architecture 有很多资源. 1 https://www.ics.com/blog/multilayered-architecture- ...

  6. Qt qml 单例模式

    Qt qml 单例模式,没什么好说的,看代码吧.单例模式很适合做全局的配置文件. [示例下载] http://download.csdn.net/detail/surfsky/8539313 [以下是 ...

  7. Qt qml listview 列表视图控件(下拉刷新、上拉分页、滚动轴)

    Qt qml listview下拉刷新和上拉分页主要根据contentY来判断.但要加上顶部下拉指示器.滚动条,并封装成可简单调用的组件,着实花了我不少精力:) [先看效果]    [功能] 下拉刷新 ...

  8. qt qml qchart 图表组件

    qt qml qchart 图表组件 * Author: Julien Wintz * Created: Thu Feb 13 23:41:59 2014 (+0100) 这玩意是从chart.js迁 ...

  9. qt qml中PropertyAnimation的几种使用方法

    qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...

随机推荐

  1. 2019暑期金华集训 Day5 树上数据结构

    自闭集训 Day5 树上数据结构 前置知识 点分治 边分治 树链剖分 LCT Top Tree LCT时间复杂度 线段树每次查询是严格\(\log n\)的,然而splay维护连续段的时候,如果每次查 ...

  2. 一个简单的setTimeout的问题

    经常使用 setTimeout,并且自己认为也算比较熟悉这个函数的用法. 不过今天碰到了,突然发现自己没有意识到这个问题.于是作为一个记录点,进行巩固一下. var timer = window.se ...

  3. 数据结构实验之排序一:一趟快排( SDUT 3398)

    #include <stdio.h> #include <string.h> int a[110000]; void qusort(int l, int r, int a[]) ...

  4. dbutils的环境搭建以及使用

    DBUtils的简单实现方式 第一步.创建Java工程[此处使用的是maven工程]并导入jar包 <!--导入mysql数据库驱动--> <dependency> <g ...

  5. DDD应对运营活动系统腐化实践

    前言 任何人类的设计都会腐化,软件系统也不例外 腐化之谜 随着系统的规模增长和复杂度膨胀,系统会慢慢腐化. 于是改一个很简单的下单地址,就会牵动整个交易系统十几处的改动. 如何解决这种腐化之谜呢? 参 ...

  6. VMware 下 Ubuntu 18.04 登录框消失解决

    问题:ubuntu18卡在登陆界面,但是没有出现选择登陆用户的框,只有紫色屏幕 解决方法:参考VMware 下 Ubuntu 18.04 登录框消失解决记录

  7. MYSQL | ERROR 1305(42000) SAVEPOINT *** DOES NOT EXIST

    autocommit模式:在开启情况下,对于每条statement来说,都会自动形成一个commit,也就是会即时对开始和结束一个事务.所以,当出现rollback to savepoint出现这个错 ...

  8. VOT-2016 代码评测工具的使用说明

    VOT-2016 代码评测工具的使用说明 2018-10-14 09:37:04 VOT-2016 官网:http://www.votchallenge.net/vot2016/ 评测代码链接:htt ...

  9. java项目代码上线

    java项目代码上线   1:java项目代码上线架构图 ip地址及主机名规划 10.0.0.11 deploy 10.0.0.12 tomcat-web01 10.0.0.13 git.oldboy ...

  10. Qt编写自定义控件65-光晕日历

    一.前言 操作系统的更新迭代速度非常快,基本上三五年就有个新版本出来,WIN10操作系统还是一个比较成功的系统,据说现在市场份额越来越大,XP的份额已经很小,WIN7的份额也在逐步减少,在最新的WIN ...