問題:有時候我們在自定義事件時,並不是需要所有的事件型別都可以觸發的,例如在數字鍵盤中,我們就不希望按下字母可以觸發事件並輸入到編輯框中。那麼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...