在Qt中,當一個事件發生時(例如鼠標點擊或某個鍵盤上的按鍵按下),其傳遞順序如圖所示。從這個圖可以看出,事件過濾器首先獲得事件,其次才是部件的 event 函數,最后是部件的事件處理函數
事件過濾器由QObject類中的兩個函數來實現。
一個是 installEventFilter,它負責在相應部件上安裝事件過濾器,其聲明為:
void QObject::installEventFilter(QObject *filterObj);
其中,filterObj參數表示要在其上實現事件過濾器函數的部件。請注意,如果我們在一個部件安裝了事件過濾器,一般在其父控件上實現事件過濾器函數。
第二個函數是 eventFilter 函數,我們在此函數中實現事件過濾器。請注意:該函數在 QObject 類中聲明為一個虛函數,因此只能由 QObject 的子類繼承使用
例子: