關於事件過濾器eventFilter的一些想法

2021-10-24 21:23:58 字數 985 閱讀 3815

qt是一種「事件驅動」的框架,其通訊核心就是eventloop事件迴圈。

其他的東西不多言,這裡提一下其中乙個比較特殊的東西——事件過濾器的一些思考。

事件過濾器的函式原型為:

[

virtual

]bool qobject::

eventfilter

(qobject *watched, qevent *event)

其中,以前忽略的一點就是其返回型別。

在以往寫事件過濾器的時候,都是跟隨者以往的一些示例寫的,返回值可以說都是模仿其寫的,根本就是不知其所以然。

在今天,知道了這點之後就可以發現以前在寫這部分內容的時候忽略的點了。

比如說,以前只知道在事件**獲之後,需要呼叫其基類的事件過濾器函式,不然可能會造成控制項不可見的情況。

不過一直是處於會出現這種問題,但是不清楚問題出現的本質原因的情況。

今天可以說是知道了這個原因,因為在事件過濾器正常捕獲控制項之後,返回值是true,表示該事件已經**獲,不再繼續往下分發。

但是如果處理的東西不是該控制項的該事件,會造成事件在這裡就中斷了,所以需要呼叫其基類的事件過濾器,將此事件傳遞過去。

手冊中的說法是:

pass the event on to the parent class.

算了,給個手冊中的示例吧:

class

mainwindow

:public qmainwindow ;

mainwindow::

mainwindow()

bool mainwindow::

eventfilter

(qobject *obj, qevent *event)

else

}else

}

由上面的示例可見,在捕獲的控制項不是需要的控制項的時候,需要將事件丟給其基類,用於它去繪製。

事件過濾器

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

事件過濾器

正常情況下,被qwidget看成是去移動 鍵盤焦點,但少數視窗部件需要自行解釋。讓我們試著設想已經有了乙個customerinfodialog的小部件。customerinfodialog 包含一系列qlineedit.現在,我們想用空格鍵來代替tab,使焦點在這些qlineedit間切換。乙個解決...

事件過濾器

6.1哪個控制項需求過濾事件 就給哪個控制項安裝過濾器 6.2步驟1 安裝過濾器 ui label t installeventfilter this 6.4 步驟2 6.4.1 重寫事件 給ui label做事件過濾器攔截 步驟1 給控制項安裝過濾器 通過父視窗給label安裝過濾器 ui lab...