为什么Qt5会忽略xkb映射?

时间:2014-02-26 20:56:00

标签: qt5 x11

我正在尝试在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下,程序按预期工作。

1 个答案:

答案 0 :(得分:2)

如前所述,这是Qt中的一个错误。

已经在这两个变更集中进行了工作:

后者被合并,预计将在Qt 5.3中到达,scheduled for 7th May 2014