Qt键盘-Android键盘映射

场景

在做远程控制的时候,需要在本地先捕获当前键盘事件,再将按的键发送给远端,在被控制端模拟对应的键盘事件来做出反应。要让程序知道按了键盘上的某个键,可以通过键盘扫描码或者各平台的虚拟键码来实现。
同一个键盘的键盘扫描码在不同平台结果都是相同的,但是不同厂家的键盘,以及接口不同的键盘(PS/2、USB) 扫描码都有可能不一样,为了减少硬件的影响还是将两个平台的虚拟键码做个映射。

映射表

只做了常见的键盘上的键,并不是全部的哈~

主键盘

Qt按键 Android按键 Android键码
Qt::Key_Escape KEYCODE_ESCAPE 111
Qt::Key_F1 KEYCODE_F1 131
Qt::Key_F2 KEYCODE_F2 132
Qt::Key_F3 KEYCODE_F3 133
Qt::Key_F4 KEYCODE_F4 134
Qt::Key_F5 KEYCODE_F5 135
Qt::Key_F6 KEYCODE_F6 136
Qt::Key_F7 KEYCODE_F7 137
Qt::Key_F8 KEYCODE_F8 138
Qt::Key_F9 KEYCODE_F9 139
Qt::Key_F10 KEYCODE_F10 140
Qt::Key_F11 KEYCODE_F11 141
Qt::Key_F12 KEYCODE_F12 142
Qt::Key_QuoteLeft KEYCODE_GRAVE 68
Qt::Key_0 KEYCODE_0 7
Qt::Key_1 KEYCODE_1 8
Qt::Key_2 KEYCODE_2 9
Qt::Key_3 KEYCODE_3 10
Qt::Key_4 KEYCODE_4 11
Qt::Key_5 KEYCODE_5 12
Qt::Key_6 KEYCODE_6 13
Qt::Key_7 KEYCODE_7 14
Qt::Key_8 KEYCODE_8 15
Qt::Key_9 KEYCODE_9 16
Qt::Key_Minus KEYCODE_MINUS 69
Qt::Key_Equal KEYCODE_EQUALS 70
Qt::Key_Backspace KEYCODE_DEL 67
Qt::Key_A KEYCODE_A 29
Qt::Key_B KEYCODE_B 30
Qt::Key_C KEYCODE_C 31
Qt::Key_D KEYCODE_D 32
Qt::Key_E KEYCODE_E 33
Qt::Key_F KEYCODE_F 34
Qt::Key_G KEYCODE_G 35
Qt::Key_H KEYCODE_H 36
Qt::Key_I KEYCODE_I 37
Qt::Key_J KEYCODE_J 38
Qt::Key_K KEYCODE_K 39
Qt::Key_L KEYCODE_L 40
Qt::Key_M KEYCODE_M 41
Qt::Key_N KEYCODE_N 42
Qt::Key_O KEYCODE_O 43
Qt::Key_P KEYCODE_P 44
Qt::Key_Q KEYCODE_Q 45
Qt::Key_R KEYCODE_R 46
Qt::Key_S KEYCODE_S 47
Qt::Key_T KEYCODE_T 48
Qt::Key_U KEYCODE_U 49
Qt::Key_V KEYCODE_V 50
Qt::Key_W KEYCODE_W 51
Qt::Key_X KEYCODE_X 52
Qt::Key_Y KEYCODE_Y 53
Qt::Key_Z KEYCODE_Z 54
Qt::Key_Tab KEYCODE_TAB 61
Qt::Key_CapsLock KEYCODE_CAPS_LOCK 115
Qt::Key_Space KEYCODE_SPACE 62
Qt::Key_BracketLeft KEYCODE_LEFT_BRACKET 71
Qt::Key_BracketRight KEYCODE_RIGHT_BRACKET 72
Qt::Key_Backslash KEYCODE_BACKSLASH 73
Qt::Key_Semicolon KEYCODE_SEMICOLON 74
Qt::Key_Apostrophe KEYCODE_APOSTROPHE 75
Qt::Key_Return KEYCODE_ENTER 66
Qt::Key_Comma KEYCODE_COMMA 55
Qt::Key_Period KEYCODE_PERIOD 56
Qt::Key_Slash KEYCODE_SLASH 76
Qt::Key_ScrollLock KEYCODE_SCROLL_LOCK 116
Qt::Key_Pause KEYCODE_BREAK 121
Qt::Key_Insert KEYCODE_INSERT 124
Qt::Key_Home KEYCODE_MOVE_HOME 122
Qt::Key_PageUp KEYCODE_PAGE_UP 92
Qt::Key_Delete KEYCODE_FORWARD_DEL 112
Qt::Key_End KEYCODE_MOVE_END 123
Qt::Key_PageDown KEYCODE_PAGE_DOWN 93
Qt::Key_Up KEYCODE_DPAD_UP 19
Qt::Key_Down KEYCODE_DPAD_DOWN 20
Qt::Key_Left KEYCODE_DPAD_LEFT 21
Qt::Key_Right KEYCODE_DPAD_RIGHT 22
Qt::Key_Menu KEYCODE_MENU 82
Qt::Key_Meta --- ---
Qt::Key_Control KEYCODE_CTRL_LEFT 113
Qt::Key_Shift KEYCODE_SHIFT_LEFT 59
Qt::Key_Alt KEYCODE_ALT_LEFT 57

小键盘

只标了和主键盘不同的键码,通过event->modifiers() & Qt::KeypadModifier检测按的键是否为小键盘上的键:

Qt按键 Android按键 Android键码
Qt::Key_NumLock KEYCODE_NUM_LOCK 143
Qt::Key_Slash KEYCODE_NUMPAD_DIVIDE 154
Qt::Key_Asterisk KEYCODE_NUMPAD_MULTIPLY 155
Qt::Key_0 KEYCODE_NUMPAD_0 144
Qt::Key_1 KEYCODE_NUMPAD_1 145
Qt::Key_2 KEYCODE_NUMPAD_2 146
Qt::Key_3 KEYCODE_NUMPAD_3 147
Qt::Key_4 KEYCODE_NUMPAD_4 148
Qt::Key_5 KEYCODE_NUMPAD_5 149
Qt::Key_6 KEYCODE_NUMPAD_6 150
Qt::Key_7 KEYCODE_NUMPAD_7 151
Qt::Key_8 KEYCODE_NUMPAD_8 152
Qt::Key_9 KEYCODE_NUMPAD_9 153
Qt::Key_Minus KEYCODE_NUMPAD_SUBTRACT 156
Qt::Key_Plus KEYCODE_NUMPAD_ADD 157
Qt::Key_Period KEYCODE_NUMPAD_DOT 158
Qt::Key_Enter KEYCODE_ENTER 66

组合键

组合键发送一个按键列表给被控制端, 例如需要按住Shift切换的键,发送Shift + 键盘上对应的键

Qt按键 Android按键 Android键码
Qt::Key_AsciiTilde --- 59 + 68
Qt::Key_Exclam --- 59 + 8
Qt::Key_At --- 59 + 9
Qt::Key_NumberSign --- 59 + 10
Qt::Key_Dollar --- 59 + 11
Qt::Key_Percent --- 59 +12
Qt::Key_AsciiCircum --- 59 + 13
Qt::Key_Ampersand --- 59 + 14
Qt::Key_Asterisk --- 59 + 15
Qt::Key_ParenLeft --- 59 + 16
Qt::Key_ParenRight --- 59 + 7
Qt::Key_Underscore --- 59 + 69
Qt::Key_Plus --- 59 + 70
Qt::Key_BraceLeft --- 59 + 71
Qt::Key_BraceRight --- 59 + 72
Qt::Key_Bar --- 59 + 73
Qt::Key_Colon --- 59 + 74
Qt::Key_QuoteDbl --- 59 + 75
Qt::Key_Less --- 59 + 55
Qt::Key_Greater --- 59 + 56
Qt::Key_Question --- 59 + 76

其余的根据event->modifiers()来识别功能键,再加上键盘键, 例如Ctrl+A => 113+29

    if (event->modifiers() & Qt::ControlModifier) {
        //ctrl
    }

    if (event->modifiers() & Qt::ShiftModifier) {
        //shift
    }

    if (event->modifiers() & Qt::AltModifier) {
        //alt
    }

    if (event->modifiers() & Qt::MetaModifier) {
        //win
    }

参考链接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容