目录
前言
事件介绍
处理事件
处理鼠标进出事件
准备
创建一个子类
确保重写的名称一致
提升控件
前言
分步介绍 Qt 里面封装的各种 系统API
事件介绍
事件是应⽤程序内部或者外部产⽣的事情或者动作的统称。在 Qt 中使⽤⼀个对象来表⽰⼀个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本⾝在不同的时刻发出的。当⽤⼾按下⿏标、敲下键盘,或者是窗⼝需要重新绘制的时候,都会发出⼀个相应的事件。⼀些事件是在⽤⼾操作时发出,如键盘事件、⿏标事件等,另⼀些事件则是由系统本⾝⾃动发出,如定时器事件。常⻅的 Qt 事件如下:
信号槽是qt对事件的封装
但是当一些事件,QT中并没有相应的信号和信号槽的时候,就相应程序员自己去设计了,这也是我们学习事件的主要原因
常见的事件
⿏标事件 | ⿏标左键、⿏标右键、⿏标滚轮,⿏标的移动,⿏标按键的按下和松开 |
键盘事件 | 按键类型、按键按下、按键松开 |
定时器事件 | 定时时间到达 |
进⼊离开事件 | ⿏标的进⼊和离开 |
滚轮事件 | ⿏标滚轮滚动 |
绘屏事件 | 重绘屏幕的某些部分 |
显⽰隐藏事件 | 窗⼝的显⽰和隐藏 |
移动事件 | 窗⼝位置的变化 |
窗⼝事件 | 是否为当前窗⼝ |
⼤⼩改变事件 | 窗⼝⼤⼩改变 |
焦点事件 | 键盘焦点移动 |
拖拽事件 | ⽤⿏标进⾏拖拽 |
处理事件
利用多态去重写处理事件的函数
处理鼠标进出事件
准备
当鼠标进入\离开某块区域的时候触发事件,我们将其处理函数进行重写即可实现我们想要的处理结果
重写 QWidget::enterEvent 和 QWidget::leaveEvent
创建一个 label 来充当我们的指定区域,加上边框
创建一个子类
填写好子类名字,还有继承的父类名字
调整好子类的构造函数
确保重写的名称一致
小心不要写错了,Qt中没有提示,没有把握可以直接从文档中复制,当拼写正确的时候,会自动斜体,这一点也可以帮助我们判断是否拼写正确
enterEvent
leavaEvent
图下我们就重写了 enterEvent 和 leaveEvent 函数,但是我们并没有看到我们重写的函数有被触发,这是因为有一个很重要的一步没有修改
这是因为我们在界面中使用的 Label 是 Qt 内部提供的,并不是我们所自定义的,我们需要将其换成我们所写的
提升控件
这一点 Qt 也已经帮我们做了处理,我们直接使用 提升为 即可
还是一句话,不要拼写错了哦
添加后,再点击 提升 即可
右上角可以看到已经更改过来了
修改之前的代码
label.h
label.cpp