一、Qt事件
Qt会将系统消息(如鼠标按键、键盘按键等)转化为Qt事件,Qt事件被封装为对象且定义该对象的类均继承自抽象类QEvent。
二、Qt事件的产生
1.操作系统产生
Spontaneous events(自发事件)
从系统得到的消息,比如鼠标按键,键盘按键等,放入系统消息队列中。2.QT应用程序程序产生
Posted events
由Qt或应用程序产生,放入Qt消息队列。static void postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority);
Sent events
由Qt或应用程序产生,不放入队列,直接被派发和处理。static bool sendEvent(QObject *receiver, QEvent *event);
注:两个函数都是接受一个 QObject * 和一个 QEvent * 作为参数。
postEvent 的 event 必须分配在 heep 上。用完后会被Qt自动删除
sendEvent 的 event 必须分配在 stack 上。例子
比如考虑重绘事件处理函数 paintEvent(),3种事件都能使得该函数被调用:
当窗口被其他窗口覆盖后,再次重新显示时,系统将产生 spontaneous 事件来请求重绘。
当我们调用 update() 时,产生的是 Posted 事件。
当我们调用 repaint() 时,产生的是 Sent 事件。