#ifndef mylineedit_h
#define mylineedit_h
#include
class
mylineedit
:public qlineedit
;#endif
// mylineedit_h
mylineedit.cpp**為:
#include
"mylineedit.h"
#include
#include
mylineedit::
mylineedit
(qwidget *parent)
:qlineedit
(parent)
void mylineedit::
keypressevent
(qkeyevent *event)
widget.h**為:
#ifndef widget_h
#define widget_h
#include
class
mylineedit
;class
widget
:public qwidget
;#endif
// widget_h
widget.cpp**為:
#include
"widget.h"
#include
"mylineedit.h"
#include
widget::
widget
(qwidget *parent)
:qwidget
(parent)
widget::
~widget()
void widget::
keypressevent
(qkeyevent *event)
mylineedi鍵盤按下事件
改造一下:
void mylineedit::
keypressevent
(qkeyevent *event)
在mylineedit中新增了event->ignore();
再執行:
這時候看到mylineedit的父視窗也響應了這個按鍵事件。
事件的傳遞
舉例二widget.h**:
#ifndef widget_h
#define widget_h
#include
class
mylineedit
;class
widget
:public qwidget
;#endif
// widget_h
widget.cpp**:
#include
"widget.h"
#include
"mylineedit.h"
#include
#include
widget::
widget
(qwidget *parent)
:qwidget
(parent)
widget::
~widget()
bool widget::
event
(qevent *event)
return qwidget::
event
(event);}
bool widget::
eventfilter
(qobject *obj, qevent *event)
}return qwidget::
eventfilter
(obj, event);}
void widget::
keypressevent
(qkeyevent *event)
mylineedit.h**:
#ifndef mylineedit_h
#define mylineedit_h
#include
class
mylineedit
:public qlineedit
;#endif
// mylineedit_h
mylineedit.cpp**:
#include
"mylineedit.h"
#include
#include
mylineedit::
mylineedit
(qwidget *parent)
:qlineedit
(parent)
bool mylineedit::
event
(qevent *event)
return qlineedit::
event
(event);}
void mylineedit::
keypressevent
(qkeyevent *event)
鍵盤上輸入乙個數字,或者字母
用圖來表示事件的傳播順序:
對於事件過濾器的使用方法:
先在父視窗中註冊需要安裝接收某訊息的控制項安裝事件過濾器:
m_lineedit-
>
installeventfilter
(this
);
然後重寫父視窗的
bool widget::
eventfilter
(qobject *obj, qevent *event)
}return qwidget::
eventfilter
(obj, event)
;}
return true表示事件已經得到了處理,不必繼續傳播。(大家可以將return true;的注釋去掉看看,會看到只會輸出 「widget的事件過濾器」 後訊息就不再被傳播了。)
return false表示事件需要繼續傳遞。
return qwidget::
eventfilter
(obj, event)
;
這樣寫,是呼叫父類的eventfilter,也就是繼續傳播事件。
當過濾器的 eventfilter() 實現被呼叫的時候, 它就可以選擇是處理該事件,還是**該事件, 或禁止該事件繼續被其它物件處理. 若所有的事件過濾器都允許乙個事件可被繼續處理( 每個過濾器處理後都返回 false ), 該事件最終將被傳送到目標物件. 如果其中乙個中止了這個流程(通過返回 true)。
提取碼:om1l
參考:qt學習之路27–事件傳遞過程和事件過濾器
qt學習之路26–事件處理、事件重寫、關閉文字編輯器操作
詳解 qt event 以及 event filter 事件處理
QT事件傳遞與事件過濾器
qt事件的型別很多,常見的qt的事件如下 鍵盤事件 按鍵按下和鬆開.滑鼠事件 滑鼠移動,滑鼠按鍵的按下和鬆開.拖放事件 用滑鼠進行拖放.滾輪事件 滑鼠滾輪滾動.繪屏事件 重繪螢幕的某些部分.定時事件 定時器到時.焦點事件 鍵盤焦點移動.進入和離開事件 滑鼠移入widget之內,或是移出.移動事件 w...
Qt 事件過濾器
qt 事件模型乙個真正強大的特色是乙個qobject的例項能夠管理另乙個qobject 例項的事件。乙個事件過濾器的安裝需要下面2個步驟 1 呼叫installeventfilter 註冊需要管理的物件。2 在eventfilter 裡處理需要管理的物件的事件。偽 如下 pfilterlineedi...
Qt 事件過濾器
目標部件有事件產生後,首先會傳遞給監視物件 事件過濾器 進行處理而不是該事件對應的事件處理器。所以說我們可以截獲事件進行處理。監視物件截獲目標物件的事件後就會呼叫自己的eventfilter 函式處理這些事件。bool qobject eventfilter qobject object,qeven...