在Qt中,所有事件都被表示为QEvent类及其子类的对象。当事件发生时,首先被调用的是QObject类中的虚函数event,其参数为QEvent类型的对象,表示所发生的事件。作为QObject类的子类,QWidget类覆盖了其基类中的event虚函数,并在其覆盖版本中根据具体的事件类型,调用与之相对应的事件处理函数。例如:
xxxxxxxxxx
51virtual void mousePressEvent(QMouseEvent* e); // 鼠标键按下事件处理函数
2virtual void mouseReleaseEvent(QMouseEvent* e); // 鼠标键弹起事件处理函数
3virtual void mouseMoveEvent(QMouseEvent* e); // 鼠标移动事件处理函数
4virtual void paintEvent(QPaintEvent* e); // 绘制事件处理函数
5···
所有事件处理函数都是虚函数,可以被QWidget类的子类覆盖,以实现供针对不同事件的处理逻辑。其中某些事件处理函数已被实现为对特定信号函数的调用,而后者则通过调用与其相连的槽函数,执行应用程序开发者编写的业务代码。当然,应用程序开发者也可以继续从这些QWidget类的子类派生出自己的子类,继续覆盖事件处理函数,并将针对特定事件的业务代码,放到相应事件处理函数的覆盖版本中。这可以被理解为,是除却信号——槽机制以外的,第二种处理事件的方法。