事件
事件(event)是由窗口系统或者Qt自身产生的,用以响应所发生的各类事情。当用户按下或者松开键盘或者鼠标上的按键时,就可以产生一个键盘或者鼠标事件;当某个窗口第一次显示的时候,就会产生一个绘制事件,用来告知窗口需要重新绘制它本身,从而使得该窗口可见。大多数事件是作为用户动作的响应而产生的,但是也有一些例外,比如像定时器事件,则是有系统独立产生的。
不应该混淆"事件"和"信号"这两个概念。一般情况下,在使用窗口部件的时候,信号是十分有用的;而在实现窗口部件时,事件则是十分有用的。例如,当使用QPushButton时,我们对于它的click()信号往往更为关注,而很少关心促成发射该信号的底层鼠标或者键盘事件。但是如果要实现的是一个类似于QPushButton的类,就需要编写一定的鼠标和键盘事件的代码,而且在必要的时候还需要发生clicked()信号。
重新实现事件处理器
在Qt中,事件就是QEvent子类的一个实例,Qt处理的事件类型有一百多种,其中的每一种都可以通过一个枚举值来进行识别。例如,QEvent::type()可以返回用于处理鼠标按键事件的QEvent::MouseButtonPress。
通过继承QObject,事件通过它们的event()函数来通知对象,在QWidget中的event()实现把绝大多数常用类型的事件提前传递给特定的事件处理器,例如mousePressEvent()/keyPressEvent()以及paintEvent()。