24 【键盘事件】

键盘事件

1.键盘事件的种类

键盘事件由用户击打键盘触发,主要有keydownkeypresskeyup三个事件,它们都继承了KeyboardEvent接口。

  • keydown:按下键盘时触发。
  • keypress:按下有值的键时触发,即按下 Ctrl、Alt、Shift、Meta 这样无值的键,这个事件不会触发。对于有值的键,按下时先触发keydown事件,再触发这个事件。
  • keyup:松开键盘时触发该事件。

如果用户一直按键不松开,就会连续触发键盘事件,触发的顺序如下。

  1. keydown
  2. keypress
  3. keydown
  4. keypress
  5. …(重复以上过程)
  6. keyup

2.KeyboardEvent 接口概述

KeyboardEvent接口用来描述用户与键盘的互动。这个接口继承了Event接口,并且定义了自己的实例属性和实例方法。

除了Event接口提供的属性,还可以配置以下字段,它们都是可选。

  • key:字符串,当前按下的键,默认为空字符串。
  • code:字符串,表示当前按下的键的字符串形式,默认为空字符串。
  • location:整数,当前按下的键的位置,默认为0
  • ctrlKey:布尔值,是否按下 Ctrl 键,默认为false
  • shiftKey:布尔值,是否按下 Shift 键,默认为false
  • altKey:布尔值,是否按下 Alt 键,默认为false
  • metaKey:布尔值,是否按下 Meta 键,默认为false
  • repeat:布尔值,是否重复按键,默认为false

3.KeyboardEvent 的实例属性

/*
 * 键盘事件:
 * 	onkeydown
 * 		- 按键被按下
 * 		- 对于onkeydown来说如果一直按着某个按键不松手,则事件会一直触发
 * 		- 当onkeydown连续触发时,第一次和第二次之间会间隔稍微长一点,其他的会非常的快
 * 			这种设计是为了防止误操作的发生。
 * 	onkeyup
 * 		- 按键被松开
 * 
 *  键盘事件一般都会绑定给一些可以获取到焦点的对象或者是document
 */

3.1 KeyboardEvent.altKey,KeyboardEvent.ctrlKey,KeyboardEvent.metaKey,KeyboardEvent.shiftKey

以下属性都是只读属性,返回一个布尔值,表示是否按下对应的键。

  • KeyboardEvent.altKey:是否按下 Alt 键
  • KeyboardEvent.ctrlKey:是否按下 Ctrl 键
  • KeyboardEvent.metaKey:是否按下 meta 键(Mac 系统是一个四瓣的小花,Windows 系统是 windows 键)
  • KeyboardEvent.shiftKey:是否按下 Shift 键

下面是一个示例。

function showChar(e) {
   
  console.log('ALT: ' + e.altKey);
  console.log('CTRL: ' + e.ctrlKey);
  console.log('Meta: ' + e.metaKey);
  console.log('Shift: ' + e.shiftKey);
}

document.body.addEventListener('keydown', showChar, false);

3.2 KeyboardEvent.charCode和KeyboardEvent.keyCode属性

e.charCode 属性通常用于 onkeypress 事件中,表示用户输入的字符的 “字符码”。

e.keyCode 属性通常用于 onkeydown 事件和 onkeyup 中,表示用户按下的按键的 “键码”。

3.2.1 charCode字符码

字符 字符码
0 ~ 9 48 ~ 57
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt提供了一个名为QVirtualKeyboard的模块,可以方便地实现虚拟键盘。它可以用于移动设备或需要屏幕键盘的桌面应用程序。 使用QVirtualKeyboard模块,你需要完成以下步骤: 1. 在.pro文件中添加QVirtualKeyboard模块: ``` QT += virtualkeyboard ``` 2. 在你的Qt应用程序中添加以下代码: ``` #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QtPlugin> Q_IMPORT_PLUGIN(QQuickVirtualKeyboardPlugin) int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); } ``` 3. 创建一个QML文件,并在其中添加一个TextInput元素。你还需要设置QML引擎的输入法选项。 ``` import QtQuick 2.5 import QtQuick.Controls 1.4 import QtQuick.VirtualKeyboard 2.1 ApplicationWindow { visible: true width: 640 height: 480 title: qsTr("Virtual Keyboard Example") TextInput { id: input anchors.centerIn: parent width: parent.width / 2 font.pixelSize: 24 } InputPanel { id: inputPanel z: 2 y: input.height visible: Qt.inputMethod.visible height: contentHeight width: input.width } Keys.onReleased: { if (event.key === Qt.Key_Tab) inputPanel.visible = !inputPanel.visible; } MouseArea { anchors.fill: parent onClicked: inputPanel.visible = false; } Keys.forwardTo: input Keys.onTabPressed: inputPanel.visible = !inputPanel.visible Component.onCompleted: { input.forceActiveFocus(); Qt.inputMethod.show(); } } ``` 这个例子中,我们创建了一个TextInput元素,并使用InputPanel来显示虚拟键盘。我们在Keys.onReleased信号中添加了一个tab按键,以便在tab键按下时显示或隐藏虚拟键盘。我们还在MouseArea中添加了一个点击事件,以便在用户点击屏幕其他区域时隐藏虚拟键盘。 以上就是使用Qt的QVirtualKeyboard模块实现虚拟键盘的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DSelegent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值