【发布时间】:2014-03-29 23:16:49
【问题描述】:
我试图在 Qt5 和 X11 下的我自己开发的 QWidget 派生小部件中捕获 keyPressEvents。我在我的应用程序中声明了一个受保护的函数keyPressEvent,并且我收到了预期的QKeyEvent *event。但是当访问由event->key() 或event->text() 按下的键时,返回值会忽略有效的xkb 映射!例如。因为我使用的是德沃夏克键盘布局,所以键【Y】映射到“F”。所以如果我在我的应用程序中按下物理键【Y】,我希望得到“f”,但我没有;我得到text()=="y" 和key()==89。将此与预期返回的 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 下,程序按预期工作。
【问题讨论】:
-
如果最新的 Qt 可以重现,我会说:submit a bug report。
-
似乎已经有错误报告:bugreports.qt-project.org/browse/QTBUG-32322。不幸的是,还没有接受修复。 :-(