2014-03-27 44 views
0

我的QMainWindow上有一個QTextEdit。我已經覆蓋了我的主窗口keyPressEvent方法,並在其中放置了一些熱鍵處理程序(即:Ctrl + J,Ctrl + K)。這些熱鍵對應用程序而言是全球性的。QTextEdit收到控制密鑰沒有傳遞到主窗口

我遇到的問題是,當QTextEdit小部件具有焦點時,這些按鍵似乎被小部件佔用並且從未被窗體看到。有趣的是,這些關鍵的組合在QTextEdit中什麼都不做。

我怎樣纔能有QTextEdit忽略組合,它沒有任何行爲關聯?或者,我怎樣才能在Qt中完成我的目標?

+0

你能轉發從QTextEdit到QMainWindow的按鍵嗎?如果QMainWindow是唯一需要在Ctrl + J,Ctrl + K上作出反應的人,那麼在此解決方案中我看不到任何可能的混淆。 – StahlRat

回答

1

無論哪個小部件具有鍵盤焦點,名義上都會消耗所有鍵盤事件。沒有「未處理」鍵盤事件的概念。 Qt的鍵盤事件的事件語義不能這樣工作。您可能需要使用QShortcut。在內部,它充當按鍵序列的應用程序範圍事件過濾器,它與QApplication的私有實現綁定。要做到這一點,唯一的方法就是充當應用程序範圍的事件過濾器,該事件過濾器對按鍵事件起作用。