【QT:QT事件】

发布于:2025-03-20 ⋅ 阅读:(14) ⋅ 点赞:(0)

目录

事件概念:

事件处理:

事件的处理方式:

处理鼠标进入和离开事件:

鼠标事件:

鼠标按下事件:

鼠标释放事件:

鼠标双击事件:

键盘事件:

处理按键事件 

定时器: 


事件概念:

事件是应用程序内部或者外部产生的事情或者动作的统称。在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 窗口大小改变时触发的事件