Qt學習之路 22 事件過濾器

2021-08-25 07:48:40 字數 834 閱讀 1069

原始出處 、作者資訊和本宣告。否則將追究法律責任。

qt 建立了qevent事件物件之後,會呼叫qobject的event()函式做事件的分發。有時候,你可能需要在呼叫event()函式之前做一些另外的 操作,比如,對話方塊上某些元件可能並不需要響應回車按下的事件,此時,你就需要重新定義元件的event()函式。如果元件很多,就需要重寫很多次 event()函式,這顯然沒有效率。為此,你可以使用乙個事件過濾器,來判斷是否需要呼叫event()函式。

qojbect有乙個eventfilter()函式,用於建立事件過濾器。這個函式的簽名如下:

bool qobject::eventfilter ( qobject * watched, qevent *

event )

如果watched物件安裝了事件過濾器,這個函式會被呼叫並進行事件過濾,然後才輪到元件進行事件處理。在重寫這個函式時,如果你需要過濾掉某個事件,例如停止對這個事件的響應,需要返回true。

event )

else

else

上 面的例子中為mainwindow建立了乙個事件過濾器。為了過濾某個元件上的事件,首先需要判斷這個物件是哪個元件,然後判斷這個事件的型別。例如,我 不想讓textedit元件處理鍵盤事件,於是就首先找到這個元件,如果這個事件是鍵盤事件,則直接返回true,也就是過濾掉了這個事件,其他事件還是 要繼續處理,所以返回false。對於其他元件,我們並不保證是不是還有過濾器,於是最保險的辦法是呼叫父類的函式。

在建立了過濾器之後,下面要做的是安裝這個過濾器。安裝過濾器需要呼叫installeventfilter()函式。這個函式的簽名如下:

本文出自 「豆子空間 」 部落格,請務必保留此出處

Qt學習之路 22 事件過濾器

qt建立了qevent事件物件之後,會呼叫qobject的event 函式做事件的分發。有時候,你可能需要在呼叫event 函式之前做一些另外的操作,比如,對話方塊上某些元件可能並不需要響應回車按下的事件,此時,你就需要重新定義元件的event 函式。如果元件很多,就需要重寫很多次event 函式,...

Qt學習之路 22 事件過濾器

2009 11 22 12 21 40 標籤 c 學習教程 qt教程qt 原始出處 作者資訊和本宣告。否則將追究法律責任。qt建立了qevent事件物件之後,會呼叫qobject的event 函式做事件的分發。有時候,你可能需要在呼叫event 函式之前做一些另外的操作,比如,對話方塊上某些元件可能...

Qt學習之路 22 事件過濾器

qt建立了qevent事件物件之後,會呼叫qobject的event 函式做事件的分發。有時候,你可能需要在呼叫event 函式之前做一些另外的操作,比如,對話方塊上某些元件可能並不需要響應回車按下的事件,此時,你就需要重新定義元件的event 函式。如果元件很多,就需要重寫很多次event 函式,...