1.qt事件处理机制
事件处理:
当用户移动鼠标的时候 ,创建一个 鼠标移动事件对象 然后把这个对象放到 事件队列里面去,事件管理器 从队列中 取出事件,然后 调用其对应的事件处理函数。
多态机制:
(1)默认不重写 : 调用 基类的 虚函数函数 处理
(2)重写 : 调用 派生类的 重写后的函数 处理
一个特例:
定时器事件 startTimer 每隔 固定时间 创建一个定时器事件对象 不会进入事件队列,直接会触发对应的定时器事件处理函数 timerEvent 去处理。
2.事件传递的过程
3.QT本身的机制是:
先NEW出事件对象,放到事件队列里,然后传递给当前对象的event函数,当前对象的event函数(区分类型) 调用 对应的 事件处理函数。
如果当前对象的event函数没有处理,Return false;就会把事件对象传递给当前对象的父对象的event函数。
2.举例1:
点击label内,label的event事件响应
点击label外,label事件不响应,widget的event响应
1.创建一个label与button,都设置成自定义控件
2.label声明事件,实现事件
3.同样的,widget主页面也是那两个函数
4.结果:
点击label内,label的event事件响应
点击label外,label事件不响应,widget的event响应
3.举例2:(分别)实现以下(三个要求)
(1)label的event事件直接自己处理。
(2)label的event事件调用自身的mousePressEvent(QMouseEvent* e)函数。
(3)label的event事件忽略处理此事件,让主页面处理。
原理:事件分先后,如果处理,后面就不管它了。
(1)label的event事件直接自己处理。
1.本事件中直接return true;
结果:
(2)label的event事件调用自身的mousePressEvent(QMouseEvent* e)函数。
实现:
结果:
(3)label的event事件忽略处理此事件,让主页面处理。
实现:
结果: