Qt5 事件過濾器

2021-10-07 17:39:28 字數 573 閱讀 3651

事件過濾器:qt中乙個獨特的事件處理機制, 可以讓乙個物件偵聽攔截

另外乙個物件的事件 ;

1)呼叫installeventfilter()註冊需要管理的物件

2)在eventfilter() 裡處理需要管理的物件的事件。

例如:用 obja 過濾 objb 的事件,即事件到達 objb 之前,先交由 obja 處理。

只需兩個步驟:

1)呼叫objb->installeventfilter(obja)

2)過載obja::eventfilter()

個人理解:

首先只要繼承於qwidget的東西,就有完整的事件系統。 每個widget都可以自己處理事件,也可以通過事件過濾器傳給其他的widget去處理

對應的事件處理函式在主視窗

qt裡的事件傳遞不是冒泡事件,是從外向裡傳,因此主視窗物件收不到子元件的事件無法對其進行處理(如果要在子元件處理事件,必須繼承子元件的類自己寫乙個類,這樣一開始事件就是傳遞給主視窗物件也就是原本的子元件類的物件)

因此要用事件過濾器將事件傳遞給主視窗物件來處理

簡單地來說就是要將事件傳遞給有相應處理動作的地方

QT5 學習之路22 事件過濾器

有時候,物件需要檢視 甚至要攔截傳送到另外物件的事件。例如,對話方塊可能想要攔截按鍵事件,不讓別的元件接收到 或者要修改回車鍵的預設處理。通過前面的章節,我們已經知道,qt 建立了qevent事件物件之後,會呼叫qobject的event 函式處理事件的分發。顯然,我們可以在event 函式中實現攔...

Qt 事件過濾器

qt 事件模型乙個真正強大的特色是乙個qobject的例項能夠管理另乙個qobject 例項的事件。乙個事件過濾器的安裝需要下面2個步驟 1 呼叫installeventfilter 註冊需要管理的物件。2 在eventfilter 裡處理需要管理的物件的事件。偽 如下 pfilterlineedi...

Qt 事件過濾器

目標部件有事件產生後,首先會傳遞給監視物件 事件過濾器 進行處理而不是該事件對應的事件處理器。所以說我們可以截獲事件進行處理。監視物件截獲目標物件的事件後就會呼叫自己的eventfilter 函式處理這些事件。bool qobject eventfilter qobject object,qeven...