最近在研究事件的幕后逻辑,以下是事件的完全逻辑过程:
1、用户出发事件;
2、生成事件对象,传递到 event() 中;
3、event() 判断事件类型 type(),并将事件对象投递到相关 type() 中;
4、相关类型接受事件,解析事件具体细节;
5、根据事件具体细节进行具体操作。
举个例子:
1、用户点击鼠标左键;
2、生成包含这个事件发生细节的对象,传递到event();
3、event() 判断是鼠标事件,将此事件投递到鼠标事件处理站;
4、鼠标事件处理站接受鼠标事件,解析得知是”点击鼠标左键“事件;
5、调用”点击鼠标左键“事件的处理方法。
event() 代码原理:(判断事件类型,再按类型调用执行)
bool QObject::event(QEvent *e)
{
switch (e->type()) {
case QEvent::Timer:
timerEvent((QTimerEvent*)e);
break;
case QEvent::ChildAdded:
case QEvent::ChildPolished:
case QEvent::ChildRemoved:
childEvent((QChildEvent*)e);
break;
// ...
default:
if (e->type() >= QEvent::User) {
customEvent(e);
break;
}
return false;
}
return true;
}
*此代码引用自: DevBean.net