1、事件ID
本质上就是一个整型值。0-999作为系统保留字段,自定义事件从QEvent::User(也就是1000)开始,
例如:
#define MY_EVENT QEvent::User+100
大部分情况下自定义事件是不会冲突的,如果我们还引入了其他库,也不完全能确保如此,最好的方式就是通过系统事件获取事件ID。
static int QEvent::registerEventType ( int hint = -1 );
注册并返回一个用户自定义事件,如果hint对应的事件可用,则直接返回hint作为事件ID,否则,返回一个可用的事件ID;
2、事件数据
我们可以通过从QEVENT派生,自定义事件所关联的数据;
class QMyEvent : public QEVENT
3、事件发送
两种方式:
1、同步发送static bool QCoreApplication::sendEvent(QObjecy * receiver, QEvent * event):
QMyEvent event;
QApplication::sendEvent(receiver, &event );
同步发送的事件是立即发送给receiver对象执行,返回值也就是事件处理后的返回值,所以event可以是栈变量;
2、异步发送static bool QCoreApplication::postEvent(QObject * receiver, QEvent * event):
QMyEvent* event = new QMyEvent();
QApplication::postEvent(receiver, event );
异步事件是向receiver对象的事件队列投递事件(添加到末尾),投递后立即返回;
4、事件处理
1、重载event函数
void QObject::event(QEvent* event)
2、重载CustomEvent;
void QObject::customEvent(QEvent* event)
3、通过EventFilter处理;