qt中提供了事件過濾器來是現在乙個部件中監控其他多個部件的事件。時間過濾器和其他部件不同,他不是乙個類,只是由兩個函式組成的一種操作,用來完成乙個部件對其他部件的事件的監控。
這兩個函式分別是qobject類中的函式。installeventfilter()和eventfilter()
要對乙個部件是用事件過濾器,那麼就要先使用其installeventfilter來為其安裝過來不起,這個函式的引數表明了監視這個部件的乙個物件。
ui->textedit->installeventfilter(this); //為編輯器部件在本視窗上安裝事件過濾器
ui->spinbox->installeventfilter(this);
當textedit有事件發生後在編寫eventfilter()事件處理器函式
bool
widget::eventfilter(qobject *obj, qevent *event) //
事件過濾器
事件傳送:
兩種函式的主要區別:
1、sendevent會立即處理給定的事件,而postevent()則會將事件放到等待排程佇列中,當下一次qt的主事件迴圈執行時才會處理它。
2、sendevent需要在棧上建立物件,在事件傳送完後無法自動刪除,而postevent必須堆上建立事件物件,事件傳送完後自動刪除。
呼叫形式:
qkeyeventmyevent(qevent::keypress, qt::key_up, qt::nomodifier);
//傳送鍵盤事件到spinbox部件
#include "widget.h"
#include "ui_widget.h"
#include #include widget::widget(qwidget *parent) :
qwidget(parent),
ui(new ui::widget)
widget::~widget()
bool widget::eventfilter(qobject *obj, qevent *event) // 事件過濾器
else
}else if (obj == ui->spinbox) else
} else
}else return qwidget::eventfilter(obj, event);
}
事件過濾器
2009 11 22 12 21 40 標籤 c 學習教程 qt教程qt 原始出處 作者資訊和本宣告。否則將追究法律責任。qt建立了qevent事件物件之後,會呼叫qobject的event 函式做事件的分發。有時候,你可能需要在呼叫event 函式之前做一些另外的操作,比如,對話方塊上某些元件可能...
事件過濾器
正常情況下,被qwidget看成是去移動 鍵盤焦點,但少數視窗部件需要自行解釋。讓我們試著設想已經有了乙個customerinfodialog的小部件。customerinfodialog 包含一系列qlineedit.現在,我們想用空格鍵來代替tab,使焦點在這些qlineedit間切換。乙個解決...
事件過濾器
6.1哪個控制項需求過濾事件 就給哪個控制項安裝過濾器 6.2步驟1 安裝過濾器 ui label t installeventfilter this 6.4 步驟2 6.4.1 重寫事件 給ui label做事件過濾器攔截 步驟1 給控制項安裝過濾器 通過父視窗給label安裝過濾器 ui lab...