Qt__事件处理机制

一、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 事件。

猜你喜欢

转载自www.cnblogs.com/narjaja/p/9143917.html