Qt鍵盤-Android鍵盤映射

場(chǎng)景

在做遠(yuǎn)程控制的時(shí)候,需要在本地先捕獲當(dāng)前鍵盤事件,再將按的鍵發(fā)送給遠(yuǎn)端,在被控制端模擬對(duì)應(yīng)的鍵盤事件來(lái)做出反應(yīng)。要讓程序知道按了鍵盤上的某個(gè)鍵,可以通過(guò)鍵盤掃描碼或者各平臺(tái)的虛擬鍵碼來(lái)實(shí)現(xiàn)。
同一個(gè)鍵盤的鍵盤掃描碼在不同平臺(tái)結(jié)果都是相同的,但是不同廠家的鍵盤,以及接口不同的鍵盤(PS/2、USB) 掃描碼都有可能不一樣,為了減少硬件的影響還是將兩個(gè)平臺(tái)的虛擬鍵碼做個(gè)映射。

映射表

只做了常見(jiàn)的鍵盤上的鍵,并不是全部的哈~

主鍵盤

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

小鍵盤

只標(biāo)了和主鍵盤不同的鍵碼,通過(guò)event->modifiers() & Qt::KeypadModifier檢測(cè)按的鍵是否為小鍵盤上的鍵:

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

組合鍵

組合鍵發(fā)送一個(gè)按鍵列表給被控制端, 例如需要按住Shift切換的鍵,發(fā)送Shift + 鍵盤上對(duì)應(yīng)的鍵

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

其余的根據(jù)event->modifiers()來(lái)識(shí)別功能鍵,再加上鍵盤鍵, 例如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
    }

參考鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容