一、事件ID異步
本質上就是一個整型值。0-999做爲系統保留字段,自定義事件從QEvent::User(也就是1000)開始,函數
例如:post
#define MY_EVENT QEvent::User+100.net
大部分狀況下自定義事件是不會衝突的,若是咱們還引入了其餘庫,也不徹底能確保如此,最好的方式就是經過系統事件獲取事件ID。對象
static int QEvent::registerEventType ( int hint = -1 );隊列
註冊並返回一個用戶自定義事件,若是hint對應的事件可用,則直接返回hint做爲事件ID,不然,返回一個可用的事件ID;事件
二、事件數據get
咱們能夠經過從QEVENT派生,自定義事件所關聯的數據;同步
class QMyEvent : public QEVENTqt
三、事件發送
兩種方式:
一、同步發送static bool QCoreApplication::sendEvent(QObjecy * receiver, QEvent * event):
QMyEvent event;
QApplication::sendEvent(receiver, &event );
同步發送的事件是當即發送給receiver對象執行,返回值也就是事件處理後的返回值,因此event能夠是棧變量;
二、異步發送static bool QCoreApplication::postEvent(QObject * receiver, QEvent * event):
QMyEvent* event = new QMyEvent();
QApplication::postEvent(receiver, event );
異步事件是向receiver對象的事件隊列投遞事件(添加到末尾),投遞後當即返回;
四、事件處理
一、重載event函數
void QObject::event(QEvent* event)
二、重載CustomEvent;
void QObject::customEvent(QEvent* event)
三、經過EventFilter處理;