Qt自定義事件與事件的傳送

2021-10-17 08:07:41 字數 2037 閱讀 8232

int priority=qt::normaleventpriority);

receiver:指向接收事件的物件

event:表示需要傳送的事件

priority:表示事件的優先順序, 事件會按優先順序排序,高優先順序的事件排在佇列的前面。 其取值為列舉型別 qt::eventpriority 中的列舉值。

如下qt::higheventpriority:值為 1。

qt::normaleventpriority:值為 0。

qt::loweventpriority:值為-1。

優先順序只是乙個相對值,其值可取介於規定的最大值和最小值之間的任何值,比如可使 priority 引數的值為 qt::higheventpriority +10。

①、基本原理:事件其實就是使用的乙個整數值表示的,因此在建立自定義事件時,只須給事件指定乙個整數值即可,在 qt 中,這個整數值是通過列舉型別 qevent::type 定義的,事件的其他資訊可以封裝在乙個自定義的類之中。

②、 自定義的事件即可以是預定義型別,也可以是自定義型別的。

③、 自定義型別的事件,需要定義乙個事件編號,該編號必須大於 qevent :: user(其值為1000),小於 qevent::maxuser(其值為 65535)。

④、各種事件不能重疊(即 qevent::type 型別的值不能相同),小於 qevent::user 的事件是qt 內部定義的事件,他們不會重疊,對於自定義的事件可以使用 registereventtype()函式來保證事件不重疊,

該函式原型如下:

static int qevent::registereventtype ( int hint = -1 );

如果 hint 的值不會產生重疊,則會返回這個值;如果 hint 不合法,系統會自動分配一

個合法值並返回。因此, 可使用該函式的返回值建立 type 型別的值。

自定義事件demo:

qevent::type t1=(qevent::type)1333;

qevent e(t1); //使用 qevent 的建構函式在堆疊上建立自定義事件

class e:public qevent, 若 t2 不是靜態的,則則初始化之後 t2 為 1324,但傳遞

//給 qevent 的 t2 是乙個不確定的值,因為按照 c++規則,對父類部分的初始化先於資料成員的初始化。

static qevent::type t2; //注意:不要使用名稱 t,因為 qevent 類之中有乙個名稱為 t 的成員變數。

e():qevent(t2){}

//方式 2:使用帶乙個引數的建構函式

qevent::type t3;

explicit e(qevent::type t4):t3(t4),qevent(t4){}

};qevent::type e::t2=(qevent::type)1334;

class a:public qwidget

if(e->type()==e::t2)

if(e->type()==((e*)e)->t3)

return qwidget::event(e);

} //event 結束

//以下為處理自定義事件的事件處理函式

void f1(e *e)

if(e->type()==t2)

return qwidget::event(e);

} //event 結束

void f1(qevent *e)

{cout<<"f1"{ cout<<"a"{ cout<<"b"<

本例依次輸出 a b be65535,f2, 其中 65535 為使用 registereventtype 函式為 t2 分配的合法的數值。 可見,安裝事件過濾器之後,傳送的事件 e1 和 e2 會使用過濾器物件的eventfilter 函式進行處理。

event()函式、事件過濾器、和事件處理函式的呼叫順序如下:

首先按逆序呼叫事件過濾器(同一物件安裝多個事件過濾器),然後呼叫 event()函式,最後呼叫事件處理函式(注意:事件處理函式需在 event()函式中明確或間接呼叫,否則不會呼叫事件處理函式)。

QT 傳送自定義事件(一)

傳送自定義事件前應該了解一下如何傳送系統預定義的事件 qt 中可以在程式中自主傳送事件 阻塞型事件傳送 事件傳送後需要等待事件處理完成 非阻塞型事件傳送 事件傳送後立即返回 事件被傳送到事件佇列中等待處理 阻塞型傳送函式 非阻塞型傳送函式 注意事項 sendevent 中事件物件的生命週期由 qt ...

Qt 自定義事件

最近做的專案,是用qt的完成的,在用到事件派發的時候,要用自己自定義的事件型別來滿足需要。具體就是按照qt的官方文件說明,做了乙個簡單的例子,以免忘記,就先寫下來儲存。首先有個customevent 類,繼承自qevent ifndef customevent h define customeven...

Qt 自定義事件

關於qt的自定義事件也是看了幾個大牛的部落格。總結下心得,如有錯誤請指出。一起成長。先給原始碼。也是第一次原創啊,不知道怎麼寫,呵呵。include include class mywidget public qwidget static const int mycustomeventtype 10...