有時候,我們需要限制某個控制項的功能。這時我們可以派生出乙個新的類,在這個新的類中對原有的功能進行限制。有些簡單的情況,不需要如此大動作。利用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 函式,在該函式裡先判斷...