事件過濾器和事件傳送

2021-08-19 01:35:17 字數 1197 閱讀 5419

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...