場(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
}