2013-08-22 20 views
2

我正在研究一個應用程序,我希望某個擊鍵(讓我們說Tab這個例子的鍵)總是由一個特定的QWidget來處理。可以說,我有這樣的層次結構:在所有情況下將keyPressEvent傳播到頂層QWidget

QWidget (top level window) 
    ¬ QWidget X (the widget that should handle all Tab presses) 
    ¬ QWidget (inner widget) 
    ¬ ... 
     ¬ ... 
     ¬ QLineEdit (very deep into the hierarchy) 

QLineEdit當前具有焦點,並可以輸入文字到它。當用戶按Tab時,我希望它可以通過QWidget X(靠近最頂層的層次結構)進行處理,以執行某些操作。如何確保當前窗口中的任何內容都有焦點時,特定的QWidget會攔截每一個按鍵?

對每個小孩QWidget安裝一個事件過濾器是不切實際的,因爲該應用程序非常龐大且易於更改。相反,讓您的QWidget覆蓋keyPressEvent

+0

你有嗎?如果在QLineEdit中按下了一個標籤,你是否可以迭代備份父母,直到找到一個QWidget X類,然後調用它的一些OnTab()方法? –

+0

QWidget X不是我的QLineEdit的父級,它只會進入頂層窗口小部件 – oggmonster

回答

0

,您可以使用QShortcut

QShortcut *Shortcut = new QShortcut(this); 
Shortcut->setKey(Qt::Key_Tab); 
connect(Shortcut, SIGNAL(activated()), this, SLOT(TabPressed())); 

然後在TabPressed()插槽,執行的操作。無論有任何其他QWidget焦點,這都可以工作。

相關問題