我正在尝试在Qt5和X11下的本土QWidget派生小部件中捕获keyPressEvents。我在我的应用程序中声明了一个受保护的函数keyPressEvent
,我按预期收到QKeyEvent *event
。但是当访问由event->key()
或event->text()
按下的键时,值返回会忽略有效的xkb映射!例如。由于我使用的是Dvorak键盘布局,因此【Y】键映射到“F”。所以,如果我在申请中按下【Y】的物理键,我希望得到“f”,但我没有;我得到text()=="y"
和key()==89
。将此与xev进行对比,xev按预期返回:
KeyPress event, serial 37, synthetic NO, window 0x2c00001,
root 0x90, subw 0x0, time 10101528, (102,85), root:(1562,106),
state 0x0, keycode 29 (keysym 0x66, f), same_screen YES,
XLookupString gives 1 bytes: (66) "f"
XmbLookupString gives 1 bytes: (66) "f"
XFilterEvent returns: False
这是Qt5中的错误还是我做错了什么?
我的键盘映射是通过xkbcomp ~/.xkbmap :0
加载的。
请注意,在Qt4下,程序按预期工作。
答案 0 :(得分:2)