Qt原理分析 七 Qt中的事件過濾器

2021-10-01 01:40:40 字數 1033 閱讀 6615

問題:有時候我們在自定義事件時,並不是需要所有的事件型別都可以觸發的,例如在數字鍵盤中,我們就不希望按下字母可以觸發事件並輸入到編輯框中。那麼qt有什麼機制可以過濾掉一部分事件呢?

###事件過濾器的典型實現

示例**:事件過濾器的使用

class mylineedit : public qlineedit

;mylineedit::mylineedit(qwidget *parent) :

qlineedit(parent)

bool mylineedit::event(qevent* e)

return qlineedit::event(e);

}void mylineedit::keypressevent(qkeyevent* e)

class widget : public qwidget

;widget::widget(qwidget *parent)

: qwidget(parent), mylineedit(this)

bool widget::event(qevent* e)

return qwidget::event(e);

}void widget::keypressevent(qkeyevent* e)

bool widget::eventfilter(qobject* obj, qevent* e)

}else

return ret;

}

現象:

當鍵盤輸入字母時,文字框無顯示,命令列僅列印出:

widget::eventfilter

當鍵盤輸入數字時,文字框顯示對應數字,命令列列印出:

widget::eventfilter

mylineedit::event

mylineedit::keypressevent

Qt 事件過濾

qt的事件處理有5中級別 1.重寫控制項的事件處理函式 如重寫keypressevent mousepressevent 和paintevent 這是最常用的事件處理方法,我們已經看到過很多這樣的例子了。2.重寫qobject event 在事件到達事件處理函式時處理它。在需要改變tab鍵的慣用法時...

qt事件原理

若對c 語法不熟悉,建議參閱 c 語法詳解 一書,電子工業出版社出版,該書語法示例短小精悍,對查閱c 知識點相當方便,並對語法原理進行了透徹 深入詳細的講解,可確保讀者徹底弄懂c 的原理,徹底解惑c 使其知其然更知其所以然。此書是一本全面了解c 不可多得的案頭必備圖書。2.6.2 qt對事件的描述及...

Qt中EventFilter過濾滑鼠事件

在qt介面中,響應事件的往往是介面,而介面上的控制項則被遮蔽,比如想要讓qlabel響應滑鼠事件,之前已寫到可以通過把qlabel提公升為類,在類中自定義滑鼠響應事件及重繪事件等事件。最近學習發現通過eventfilter過濾事件更方便且高效。在介面類的標頭檔案新增 public slots boo...