一、事件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处理;