Qt 事件傳遞方向

2021-10-09 20:52:05 字數 554 閱讀 1763

qt的事件傳遞方向:先傳遞給獲得焦點的部件,只有在此部件忽略掉了該事件,才會傳遞給這個部件的父部件。重新實現事件處理函式的時候,要呼叫父類的相應事件處理函式來實現預設操作。

例如在widget上構造乙個自己的lineedit部件,只有當lineedit部件忽略掉了這個事件後,父部件才能捕獲,並且這個部件繼承自qlineedit,如果不執行qlineedit類的預設事件處理函式keypressevent(event),那麼這個部件將無法輸入。

void mylineedit::keypressevent(qkeyevent * event)

void widget::keypressevent(qkeyevent *event)

效果,輸入資料能夠顯示在lineedit框中,且兩條列印資訊都顯示。

需要注意的是,如果使用事件過濾器,那麼事件的傳遞順序:先事件過濾器(裝載在父部件),然後才是獲得焦點的部件event函式。event()函式和事件處理函式是在焦點部件內重新定義,而事件過濾器卻是在焦點部件的父部件中定義的。

Qt事件傳遞相關問題

涉及到深層次視窗結構或者視窗封裝時,經常會遇到上層視窗接收不到事件的問題。排除這類問題需要了解視窗間的事件傳遞過程。應用程式產生事件時,事件會先派發給父視窗,由父視窗在內部派發給子視窗,子視窗會進一步傳遞給子視窗的子視窗,直到遍歷到最後沒有子視窗的視窗物件,進入子視窗的使用者事件處理函式。從子視窗開...

QT事件傳遞與事件過濾器

qt事件的型別很多,常見的qt的事件如下 鍵盤事件 按鍵按下和鬆開.滑鼠事件 滑鼠移動,滑鼠按鍵的按下和鬆開.拖放事件 用滑鼠進行拖放.滾輪事件 滑鼠滾輪滾動.繪屏事件 重繪螢幕的某些部分.定時事件 定時器到時.焦點事件 鍵盤焦點移動.進入和離開事件 滑鼠移入widget之內,或是移出.移動事件 w...

Qt的事件傳遞過程和事件過濾器的示例

ifndef mylineedit h define mylineedit h include class mylineedit public qlineedit endif mylineedit h mylineedit.cpp 為 include mylineedit.h include inc...