38-Qt 中的事件处理(上)

1. GUI 程序原理回顾

  • 图形界面应用程序的消息处理模型

在这里插入图片描述

  • 那么操作系统发送的消息如何转变为 QT 信号?

2. QT 中的事件处理

  • QT 平台将系统产生的消息转换为 QT 事件

    • QT 事件是一个 QEvent 的对象

    • QT 事件用于描述程序内部或外部发生的动作

    • 任意的 QObject 对象都具有事件处理的能力

在这里插入图片描述

  • GUI 应用程序的事件处理方式

    1. QT 事件产生后立即被分发到 QWidget 对象
    2. QWidget 中的 event(QEvent*) 进行事件处理
    3. event() 根据事件类型调用不同的事件处理函数
    4. 在事件处理函数中发送 QT 预定义的信号
    5. 调用信号关联的槽函数
  • 事件( QEvent ) 和信号 ( SIGNAL )不同

    • 事件由具体对象进行处理
    • 信号由具体对象主动产生
    • 改写事件处理函数可能导致程序行为发生改变
    • 信号是否存在对应的槽函数不会改变程序行为
    • 一般而言,信号在具体的事件处理函数中产生

3. 按钮点击场景分析

  • QPushButton 事件处理分析

    1. 接收鼠标事件
    2. 调用 event(QEvent*) 成员函数
    3. 调用 mouseReleaseEvent(QMouseEvent*) 成员函数
    4. 调用 click() 成员函数
    5. 触发信号 SIGNAL(clicked())
  • QPushButton 中信号处理实战

  • NotePad 项目中存在bug,当我们点击关闭按钮之后,NotePad会直接关闭而不会提示我们是否保存数据,这样是不友好的

  • 文本编辑器中的关闭操作

在这里插入图片描述

4. 总结

  • QT 中的事件 ( QEvent ) 和信号 ( SIGNAL ) 不同
  • 事件由 QObject 的对象进行处理
  • 信号由 QObject 对象触发
  • 重写事件处理函数可能会改变程序行为
  • 信号的触发不会对程序行为造成影响
  • 事件处理是在实际工程开发中的应用非常普遍
发布了73 篇原创文章 · 获赞 31 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_40794602/article/details/105737566