美文网首页Qt学习
Qt键盘-Android键盘映射

Qt键盘-Android键盘映射

作者: 玖零儛 | 来源:发表于2019-06-17 17:19 被阅读0次

    场景

    在做远程控制的时候,需要在本地先捕获当前键盘事件,再将按的键发送给远端,在被控制端模拟对应的键盘事件来做出反应。要让程序知道按了键盘上的某个键,可以通过键盘扫描码或者各平台的虚拟键码来实现。
    同一个键盘的键盘扫描码在不同平台结果都是相同的,但是不同厂家的键盘,以及接口不同的键盘(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
        }
    

    参考链接

    相关文章

      网友评论

        本文标题:Qt键盘-Android键盘映射

        本文链接:https://www.haomeiwen.com/subject/priafctx.html