正常情況下,被qwidget看成是去移動 鍵盤焦點,但少數視窗部件需要自行解釋。
讓我們試著設想已經有了乙個customerinfodialog的小部件。customerinfodialog 包含一系列qlineedit. 現在,我們想用空格鍵來代替tab,使焦點在這些qlineedit間切換。
乙個解決的方法是子類化qlineedit,重新實現keypressevent(),並在keypressevent()裡呼叫focusnextchild()。像下面這樣:
void mylineedit::keypressevent(qkeyevent *event)
else
}
缺點:如果customerinfodialog裡有很多不同的控制項(比如qcombobox,qedit,qspinbox),我們就必須子類化這麼多控制項。這是乙個煩瑣的任務。
乙個更好的解決辦法是: 讓customerinfodialog去管理他的子部件的按鍵事件,實現要求的行為。我們可以使用事件過濾器。
1, 呼叫installeventfilter()註冊需要管理的物件。
2,在eventfilter() 裡處理需要管理的物件的事件。
一般,推薦在customerinfodialog的建構函式中註冊被管理的物件。像下面這樣:
customerinfodialog::customerinfodialog(qwidget *parent)
: qdialog(parent)
一旦,事件管理器被註冊,傳送到firstnameedit,lastnameedit,cityedit,phonenumberedit的事件將首先傳送到eventfilter()。
下面要做的是安裝這個過濾器。安裝過濾器需要呼叫installeventfilter()函式。這個函式的簽名如下:
void qobject::installeventfilter ( qobject * filterobj )
下面是乙個 eventfilter()函式的實現:
bool customerinfodialog::eventfilter(qobject *target, qevent *event)
} }
return qdialog::eventfilter(target, event);
}
事件過濾器
2009 11 22 12 21 40 標籤 c 學習教程 qt教程qt 原始出處 作者資訊和本宣告。否則將追究法律責任。qt建立了qevent事件物件之後,會呼叫qobject的event 函式做事件的分發。有時候,你可能需要在呼叫event 函式之前做一些另外的操作,比如,對話方塊上某些元件可能...
事件過濾器
6.1哪個控制項需求過濾事件 就給哪個控制項安裝過濾器 6.2步驟1 安裝過濾器 ui label t installeventfilter this 6.4 步驟2 6.4.1 重寫事件 給ui label做事件過濾器攔截 步驟1 給控制項安裝過濾器 通過父視窗給label安裝過濾器 ui lab...
Qt 事件過濾器
qt 事件模型乙個真正強大的特色是乙個qobject的例項能夠管理另乙個qobject 例項的事件。乙個事件過濾器的安裝需要下面2個步驟 1 呼叫installeventfilter 註冊需要管理的物件。2 在eventfilter 裡處理需要管理的物件的事件。偽 如下 pfilterlineedi...