我是靠谱客的博主 闪闪紫菜,最近开发中收集的这篇文章主要介绍Qt原理分析(一):Qt中的消息处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.Qt中的消息处理

Qt的消息模型

  • Qt封装了具体操作系统的消息机制

  • Qt遵循经典的GUI消息驱动事件模型

在这里插入图片描述

问题
1.Qt中如何表示用于消息
2.Qt中如何映射用户消息到消息处理函数
3.Qt中消息映射需要遵循什么规则?

信号与槽

Qt中定义了与系统消息相关的概念
信号(Signal)

  • 由操作系统产生的消息

槽(Slot)

  • 程序中的消息处理函数

连接(connect)

  • 将系统消息绑定到消息处理函数

Qt中的消息处理机制

在这里插入图片描述

问题:那么如何连接信号与槽呢?

Qt的核心—QObject::connect函数

在这里插入图片描述

  • 在Qt中,消息用字符串进行描述
  • connect函数在消息名和处理函数之间建立关系

Qt中的“新”关键字

  1. SIGNAL:用于指定消息名
  2. SLOT:用于指定消息处理函数名
  3. Q_OBJECT:所有自定义槽的类必须在类声明的开始处加上Q_OBJECT
  4. slots:用于在类中声明消息处理函数

示例代码:初探信号与槽

#include <QtGui/QApplication>
#include <QPushButton>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton b;

    b.setText("Click me to quit!");
    b.show();

    QObject::connect(&b, SIGNAL(clicked()), &a, SLOT(quit()));
    
    return a.exec();
}

代码分析:

  1. b对象设置为发送对象
  2. 消息名设置为“点击消息”
  3. a对象设置为接收对象
  4. a接收到“点击消息”时执行“退出动作”

所以当我们点击b按钮时,a对象将退出。

信号与槽不可忽视的军规

当我们自定义信号和槽时,需要注意一下几点规则。

  1. Qt类只能在头文件中声明
  2. 信号与槽的原型应该完全相同
  3. 信号参数多于槽参数时,多于的参数被忽略
  4. 槽函数的返回值必须是void类型
  5. 槽函数可以像普通成员函数一样被调用
  6. 信号与槽的访问属性对于connect/disconnect无效

信号与槽的意义

  1. 最大限度的弱化了类之间的耦合关系

  2. 在设计阶段,可以减少不必要的接口类(抽象类)

  3. 在开发阶段,对象间的交互通过信号与槽动态绑定

最后

以上就是闪闪紫菜为你收集整理的Qt原理分析(一):Qt中的消息处理的全部内容,希望文章能够帮你解决Qt原理分析(一):Qt中的消息处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部