2014-02-26 55 views
1

我想在Qt5和X11下我的本土QWidget派生窗口部件中捕獲keyPressEvents。我已經在我的應用程序中聲明瞭受保護的功能keyPressEvent,並且我收到了預期的QKeyEvent *event。但是,當訪問由event->key()event->text()按下的鍵時,返回值將忽略有效的xkb映射!例如。因爲我使用的是德沃夏克鍵盤佈局,所以鍵【Y】映射到「F」。所以如果我在我的應用程序中按下物理按鍵【Y】,我希望得到「f」,但我沒有;我得到text()=="y"key()==89。與預期回報的xev對比:爲什麼Qt5忽略xkb映射?

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

如果這可以用最新的Qt重現,我會說:[提交bug報告](http://bugreports.qt-project.org/)。 – peppe

+0

似乎已經有錯誤報告:https://bugreports.qt-project.org/browse/QTBUG-32322。不幸的是,還沒有接受修復。 :-( –

回答