摘要

信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号 (signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣, 它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函 数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接 的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个 操作就会被自动触发。(这里提一句,Qt 的信号槽使用了额外的处理来实现,并不是 GoF 经典的观察者模式的实现方式。)


一,信号和槽机制分析

介于书上的解释过于繁杂,我选择用一个阿拉丁神灯的故事来引入这个概念,首先把这个故事抽离出来:

但是我们可以发现:人摩擦灯和神灯出灯神本是不太相关的两件事情(比如:人摩擦的不一定是神灯,神灯出灯神不一定是因为摩擦),因此我们可以用connect函数把二者关联起来。

connect(发出信号的对象,发出的信号,接收信号的对象,接收到信号之后需要调用的函数(槽函数))

connect()函数最常用的一般形式:

connect(sender, signal(信号), receiver, slot(槽));

信号槽要求信号和槽的参数一致,所谓一致,是参数类型一致。如果不一致,允许的情况是,槽函数的参数可以比信号的少,即便如此,槽函数存在的那 些参数的顺序也必须和信号的前面几个一致起来。(可以忽略部分传来的信号参数),但是不能说信号根本没有这个数据,你就要在槽函数中使用(就是槽函数的参数比信号的多,这是不允许的)

QT从入门到入土(三)——信号和槽机制相关推荐

  1. QT每日一练day8:信号与槽机制

    一. 创建一个空的项目 添加QT的支持 添加main.cpp 编译报错,Q_OBJECT放在CPP文件中会报这个错误,必需放头文件,这个宏比较特殊,只有放头文件才能展开 添加头文件test.h mai ...

  2. 【Qt 从入门到入土】下篇

    [Qt 从入门到入土]上篇 一个非常好的学习 Qt 的视频 本文目录 6. 对话框QDialog 6.1 基本概念 6.2 标准对话框 6.3 自定义消息框 6.4 消息对话框 6.5 标准文件对话框 ...

  3. Qt从入门到放弃——信号和槽机制(SigalSlot)

    标题信号和槽概念 Qt提供了信号和槽机制用于完成界面操作的响应,信号和槽机制是完成任意两个Qt对象之 间的通信机制.其中,信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数. 例如,窗 ...

  4. QT 的信号与槽机制介绍

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  5. 【qt】QT 的信号与槽机制

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  6. 【转载】QT 的信号与槽机制介绍

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  7. Qt源码分析之信号和槽机制

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的 说法,简单点说就是如何在一个类的一 ...

  8. Qt中的信号与槽机制解析

    注:要想使用Qt的核心机制信号与槽,就必须在类的私有数据区声明Q_OBJECT宏,然后会有moc编译器负责读取这个宏进行代码转化,从而使Qt这个特有的机制得到使用. 所谓信号槽,简单来说,就像是插销一 ...

  9. Qt 信号和槽机制 优点 效率的详解

    一.信号和槽机制 Qt提供了信号和槽机制用于完成界面操作的响应,是完成任意两个Qt对象之间的通信机制. 其中,信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数. 二..信号和槽机制的 ...

最新文章

  1. git搜索--grep
  2. iOS快速开发框架Bee-Framework应用和解析(二) - Bee framework架构概览
  3. 关于salt MD5
  4. ASP.NET Core文件上传、下载与删除
  5. css flexbox模型_完整CSS课程-包括flexbox和CSS网格
  6. Windows下安装scikit-learn
  7. 国际站 RDS MySQL 5.7 高可用版发布
  8. SignalR--Web客户端
  9. Java线程更新ui_android使用多线程更新ui示例分享
  10. 腾讯2014年实习生招聘笔试面试经历
  11. linux 命令行 浏览器_3个用于Linux命令行的Web浏览器
  12. Soulver 3 for Mac(Mac计算器软件)
  13. 如何用python画房子_用python画一个小房子
  14. 不是python文件打开的合法模式组合是_以下选项中,不是Python文件打开的合法模式组合是:...
  15. mysql 执行delete引发死锁问题
  16. mysql dbms是什么_数据库管理系统(DBMS)是用来做什么的?
  17. 百度天气预报API的使用(java版本)
  18. 【防火墙配置QOS之最小带宽保证】
  19. 原型图到成品:步步深入 CSS 布局
  20. spring RestTemplate 实例(NameValuePair)

热门文章

  1. 长沙立坤文化怎么样?是骗子公司吗?网友想知道!
  2. web前端学习26(锚点链接)
  3. Hadoop安装配置
  4. 基于iis配置一个ftp服务器
  5. 融云 CTO 岑裕:出海技术前沿探索和排「坑」实践
  6. 筚路蓝缕,以启山林 | 做RPA行业的坚守者与创新者——数据猿专访云扩科技CTO史秋芳
  7. POJ 2248 搜索
  8. 第16课:转型的难处
  9. PHP面试要点——MQ消息队列
  10. oss客户端工具_云享会 | 沃云公有云重点产品推荐:文件存储NASamp;对象存储OSS...