在做远程控制的时候,需要在本地先捕获当前键盘事件,再将按的键发送给远端,在被控制端模拟对应的键盘事件来做出反应要让程序知道按了键盘上的某个键,可以通过键盘扫描码或者各平台的虚拟键码来实现同一个键盘的键盘扫描码在不同平台结果都是相同的,但是不同厂家的键盘,以及接口不同的键盘(PS/2、USB) 扫描码都有可能不一样,为了减少硬件的影响还是将两个平台的虚拟键码做个映射,今天小编就来聊一聊关于qt自定义虚拟键盘,Qt键盘-Android键盘映射?接下来我们就一起去研究一下吧!
qt自定义虚拟键盘,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开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
点击→领取「链接」
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
}