目录
事件概念:
事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件,所有的QT事件均继承与抽象类QEvent,事件是由系统或者Qt平台本身在不同的时刻发出的。用户进行的各种操作会产生事件,程序员给事件关联上处理函数,当事件触发时就能够执行到对应的代码。
事件本身是操作系统提供的机制,QT把这种机制进行了封装,但对于事件对应的代码书写并不方便,于是Qt对事件机制进行了进一步的封装,这就是信号槽。信号槽就是对事件的进一步封装,事件就是信号槽的底层机制
事件处理:
通俗来讲就是将代码和事件关联起来,当事件触发就到指定的代码中执行处理 。
事件的处理方式:
- 让当前类重写某个事件处理函数(多态机制,创建子类继承Qt已有的类,在子类中重写父类的事件处理函数,通过多态机制,执行重写的子类函数)
处理鼠标进入和离开事件:
这里虽然重写了这两个函数,但是事件却没有得到处理,原因是当前在界面上创建的label其实是QLabel而不是自定义写的label,必须要确保界面上的label是自定义的那个类才可以。那么如何将Label转为自定义的label?点到图形化界面后,将界面的QLabel鼠标右击,点击提升为...将需要转换的类添加上去即可
鼠标事件:
鼠标按下事件:
通过事件获取鼠标点击的位置
mousePressEvent函数按下左右,滚轮都可以触发
鼠标释放事件:
鼠标双击事件:
以上操作都是在自定义的Label中完成的,此时鼠标只有在Label范围内进行动作时才会捕捉到,以上操作也可放在Widget中完成,那么鼠标的在整个窗口的各个动作都能捕获到。
此外,鼠标移动不同于鼠标按下,鼠标移动当鼠标随便移动就可以产生大量事件,当进行事件捕获时进行一些复杂的逻辑时,程序的负担就会很重容易产生卡顿,因为Qt为了保证鼠标的流畅,默认情况下不会对鼠标位置进行追踪,追踪鼠标位置需要手动调用(方法为:setMouseTacking)
键盘事件:
处理按键事件
捕获键盘按键方法:keyPressEvent(QKeyEvent*)
定时器:
QTimer实现定时器功能,而QTimer基于QTimeEvent支撑的
startTimer | 启动定时器 |
KiilTimer | 关闭定时器 |
使用timerEvent比QTimer复杂,手动管理timerId,此外还需要区分该函数是由那个Timer引起的
窗口移动和大小改变事件:
moveEevent | 窗口移动时触发的事件 |
resizeEvent | 窗口大小改变时触发的事件 |