Qt的事件
事件和信号与槽的不同:
signal and slots 是Qt自己设计的机制之一,但是事件是更底层的,被普遍开发框架接受的机制之一。建议的是,表面 / 界面使用信号与槽,更深层使用事件。
事件的来源:
事件是窗口系统或者Qt对不同的情况的响应。主要来源就是两个:
——是对用户行为的被动响应,比如按下鼠标之类;
——被系统独立产生的,比如是定时器事件。
或者可以这么说,
——Spontaneous 事件,即自发事件:由窗口系统产生,它们被放到系统队列中,通过事件循环逐个处理。
——Posted 事件:由Qt或是应用程序产生,它们被Qt组成队列,再通过事件循环处理。
——Sent 事件:由Qt或是应用程序产生,但它们被直接发送到目标对象。
具体的几大类是:
——键盘或者鼠标:当按下 / 释放键或者鼠标键时,一个键盘事件或者鼠标事件就会生成。
窗口:当一个窗口被移动,使下面一个窗口被暴露出来,一个绘制事件就会被产生用来告诉新的可视窗口来重新绘制它本身。
——窗口焦点:只要窗口部件获得 / 焦点,都会有一个事件产生。(其实,窗口焦点是什么,我都不清楚)
——定时器事件:Qt自己开启了个定时器,时间到则触发事件。
当我们在main()函数的末尾调用QApplication::exec()时,程序进入了Qt的事件循环,大概来讲,事件循环如下:</