Qt 的事件過濾器

2021-07-03 20:14:39 字數 1138 閱讀 6102

有時候,我們需要限制某個控制項的功能。這時我們可以派生出乙個新的類,在這個新的類中對原有的功能進行限制。有些簡單的情況,不需要如此大動作。利用qt 

提供的事件過濾功能也可以做到許多。

所謂事件過濾就是提前截獲發往某個物件的所有訊息,根據需要遮蔽掉某一些,或者對某些訊息提前進行些處理。比如許多瀏覽器都支援滑鼠手勢,這個其實就可以利用事件過濾器來實現。

這裡用乙個小例子來說明事件過濾器的用法。我們將事件過濾器應用到乙個 lineedit 

上,讓這個

lineedit 

只能輸入數字,其他的字元輸入都遮蔽掉。

#ifndef keyboardfilter_h

#define keyboardfilter_h

#include class keyboardfilter : public qobject

~keyboardfilter(){}

protected:

bool eventfilter(qobject *to, qevent *event);

};#endif // keyboardfilter_h

#include "keyboardfilter.h"

#include #include bool keyboardfilter::eventfilter(qobject *to, qevent *event)

return true;

}return qobject::eventfilter(to, event);

}

下面我們要給乙個 lineedit 

安裝事件過濾器了。其實就一條語句。

dialog::dialog(qwidget *parent) :

qdialog(parent),

ui(new ui::dialog)

之後就可以測試一下了。這個lineedit 現在只能輸入數字。

但是用複製貼上的方法還是可以輸入其他內容的。所以這個方案並不是完美的解決方案。只是給大家舉個例子而已。

Qt 事件過濾器

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

Qt 事件過濾器

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

Qt事件過濾器

昨天發了blog之後,提供一種不用子類化的方式來實現左鍵雙擊,就是使用qobject提供的事件過濾器來實現對其他物件的事件進行響應。這裡先安裝對應物件的事件過濾器,installeventfilter this 這樣只要該物件產生事件,就會先執行本物件的eventfilter 函式,在該函式裡先判斷...