<Qt>事件的幕后运作原理
2017-04-18 13:56
211 查看
最近在研究事件的幕后逻辑,以下是事件的完全逻辑过程:
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
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
相关文章推荐
- Qt中Ui名字空间以及setupUi函数的原理和实现 <转>
- <Linux+qt>设置使用键盘控制事件响应
- requireJS&seaJS模块加载器原理:<script>标签加载外部js文件用到的onload、onerror和onreadystatechange事件
- <Qt>事件的accept()与ignore()的传递
- <Qt+Linux>事件过滤
- <Linux+Qt>时间控制事件触发
- 保护SQL语句不被Sql Profiler / 事件探查器 捕获跟踪到<转>
- JQuery UI 插件原理分析(一)<jquery.ui.core.js>
- ASP.NET 2.0 异步页面原理浅析 [1] <转>
- QT源码解析(四)剖析Qt的事件机制原理
- Js事件对象<转>
- 面向对象系统设计与分析专题<4>__业务事件分析
- 剖析Qt的事件机制原理
- <转载>C# 中的委托和事件
- Nand ECC校验和纠错原理及2.6.27内核ECC代码分析<转帖>
- <转载>c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex
- 别了j2me-->系统原理之低级api 与低级事件
- 阻止JavaScript事件冒泡传递<转>
- <学习笔记>王爽汇编语言__转移指令原理
- 转:回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的