在Qt中有一种特殊的机制——信号槽,用户进行的各种操作,就可能会产生出信号,可以给某个信号指定槽函数,当信号触发时,就能够自动的执行到对应的槽函数。
事件与信号槽非常类似,用户进行的各种操作也就产生事件,程序员同样可以给事件关联上处理函数(处理的逻辑),当事件触发的时候,就能执行到对应的代码。
事件本身是操作系统提供的机制。Qt也同样把操作系统事件机制进行了封装,拿到了Qt里面,但是由于事件对应的代码编写起来不是很方便,所以Qt对于事件这样的机制又进一步的封装,就得到了信号槽。
也就是说,信号槽就是对于事件的进一步封装,事件是信号槽的底层机制。
实际Qt开发程序过程中,绝大部分和用户之间进行的交互都是通过“信号槽”来完成的。但是有些特殊情况下,信号槽不一定能搞定(某个用户的动作行为,Qt没有提供对应的信号),此时就需要通过重写事件处理函数的形式,来手动处理事件的响应逻辑。
开放事件机制可以根据实际的需要进行更深度的定制化 diy 操作了。
用户进行很多操作,就会产生很多事件,当然也会产生很多信号。
事件是应用程序内部或者外部产生的事情或者动作的通常。在 Qt 中使⽤⼀个对象来表⽰⼀个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本⾝在不同的时刻发出的。当⽤⼾按下⿏标、敲下键盘,或者是窗⼝需要重新绘制的时候,都会发出⼀个相应的事件。⼀些事件是在⽤⼾操作时发出,如键盘事件、⿏标事件等,另⼀些事件则是由系统本⾝⾃动发出,如定时器事件。
不同场景下,需要关注的点是不一样的,这些事件的子类中就会包含一些对应的不同的属性。
常见事件描述:
事件名称 | 描述 |
---|---|
⿏标事件 | ⿏标左键、⿏标右键、⿏标滚轮,⿏标的移动,⿏标按键的按下和松开 |
键盘事件 | 按键类型、按键按下、按键松开 |
定时器事件 | 定时时间到达 |
进⼊离开事件 | ⿏标的进⼊和离开 |
滚轮事件 | ⿏标滚轮滚动 |
绘屏事件 | 重绘屏幕的某些部分 |
显⽰隐藏事件 | 窗⼝的显⽰和隐藏 |
移动事件 | 窗⼝位置的变化 |
窗⼝事件 | 是否为当前窗⼝ |
⼤⼩改变事件 | 窗⼝⼤⼩改变 |
焦点事件 | 键盘焦点移动 |
拖拽事件 | ⽤⿏标进⾏拖拽 |