使用connect()可以让我们连接系统提供的信号和槽。但是,Qt 的信号槽机制并不仅仅是使用系统提供的那部分,还会允许我们自己设计自己的信号和槽。

下面我们看看使用 Qt 的信号槽:

首先定义一个学生类和老师类:老师类中声明信号 饿了 hungry
signals:void hungury();学生类中声明槽   请客 treatpublic slots:void treat();在窗口中声明一个公共方法下课,这个方法的调用会触发老师饿了这个信号,而响应槽函数学生请客void MyWidget::ClassIsOver()
{//发送信号emit teacher->hungury();
}学生响应了槽函数,并且打印信息
//自定义槽函数 实现
void Student::eat()
{qDebug() << "该吃饭了!";
}
在窗口中连接信号槽teacher = new Teacher(this);student = new Student(this);connect(teacher,&Teacher::hungury,student,&Student::treat);
并且调用下课函数,测试打印出 “该吃饭了”自定义的信号 hungry带参数,需要提供重载的自定义信号和 自定义槽
void hungury(QString name);  自定义信号
void treat(QString name );    自定义槽
但是由于有两个重名的自定义信号和自定义的槽,直接连接会报错,所以需要利用函数指针来指向函数地址, 然后在做连接
void (Teacher:: * teacherSingal)(QString) = &Teacher::hungury;
void (Student:: * studentSlot)(QString) = &Student::treat;
connect(teacher,teacherSingal,student,studentSlot);

自定义信号槽需要注意的事项:

  • 发送者和接收者都需要是QObject的子类(当然,槽函数是全局函数、Lambda 表达式等无需接收者的时候除外);
  • 信号和槽函数返回值是 void
  • 信号只需要声明,不需要实现
  • 槽函数需要声明也需要实现
  • 槽函数是普通的成员函数,作为成员函数,会受到 public、private、protected 的影响;
  • 使用 emit 在恰当的位置发送信号;
  • 使用connect()函数连接信号和槽。
  • 任何成员函数、static 函数、全局函数和 Lambda 表达式都可以作为槽函数
  • 信号槽要求信号和槽的参数一致,所谓一致,是参数类型一致。
  • 如果信号和槽的参数不一致,允许的情况是,槽函数的参数可以比信号的少,即便如此,槽函数存在的那些参数的顺序也必须和信号的前面几个一致起来。这是因为,你可以在槽函数中选择忽略信号传来的数据(也就是槽函数的参数比信号的少)。

10 QT - 自定义信号和槽相关推荐

  1. Qt 自定义信号与槽

    注 对象与槽理解 //第一个参数lineEdit是激发事件对象,信号中的方法必须在对象中存在,并在对象类头文件signals下定义,//第二个参数信号,//第三个参数this是槽方法所属类的对象,且必 ...

  2. QT Core | 信号槽03 - 自定义信号与槽

    文章目录 一.前言 二.新建一个QT控制台项目 2.1.New File or Project 2.2.Project Location 2.3.Define Build System 2.4.Kit ...

  3. C++框架_之Qt的信号和槽的详解

    目录 C++_之Qt的信号和槽的详解 1.概述 1.1对象树(子对象动态分配空间不需要释放) 2.信号和槽 Qt5 的书写方式:(推荐的使用)★★★★★ Qt4 的书写方式: 3.自定义信号槽 3.1 ...

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

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

  5. 【Qt】Qt中信号与槽

    00. 目录 文章目录 00. 目录 01. 信号与槽 02. 介绍 03. 信号与槽 04. 信号 05. 槽 06. 一个小例子 07. 一个真实的例子 08. 信号和槽使用默认参数 09. 信号 ...

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

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

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

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

  8. qt槽函数如何传递多个参数_【Qt】信号和槽对值传递参数和引用传递参数的总结...

    在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...

  9. Qt Designer信号和槽

    2019独角兽企业重金招聘Python工程师标准>>> 先入一些信号槽的基本介绍: 信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包 ...

  10. QT中信号与槽的常见使用

    一.标准信号与槽函数 有些信号和槽的函数模板都已经被写好了,只需要调用即可 下面是一个点击按钮关闭窗口的程序 .h文件 #ifndef MYWIDGET_H #define MYWIDGET_H#in ...

最新文章

  1. Nat.Mach.Intell.| DEcode:深度学习解读差异基因表达原理
  2. 蚂蚁金服付志嵩:数据膨胀?关系复杂?如何升级图数据库?
  3. SqlServer sa 用户登录失败的解决方法
  4. 基于FAST-RCNN深度学习的目标识别算法的MATLAB仿真
  5. Python编程基础:第一节 变量Variables
  6. 大数据读书笔记(2)-流式计算
  7. python 协程可以嵌套协程吗_Python线程、协程探究(2)——揭开协程的神秘面纱...
  8. 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
  9. Windows高级编程学习笔记(二)
  10. oracle中orand使用,Postgres兼容Oracle研究——orafce调研
  11. Java项目课程01:课程概述
  12. php显示几个字符串,比较php中的两个字符串并显示字符差异
  13. 原生ajax接收json字符串(简单介绍)
  14. IDEA上的文字转拼音名
  15. 爱的无常、当下、柔软
  16. kotlin类的成员变量 方法
  17. python画皮卡丘
  18. html日历页面节假日_js css+html实现简单的日历
  19. 半年内连发6篇CNS!又一顶级学者全职回国,加盟浙大!
  20. Stanford Large-Scale 3D Indoor Spaces Dataset (S3DIS)

热门文章

  1. 通达OA v12流程中心
  2. 企业网络管理利器-SpiceWorks(1)
  3. ue设置注释快捷键_UE编辑器快捷键大全 UltraEdit快捷键有哪些
  4. 【C语言】关机程序的实现以及函数
  5. 安徽省芜湖市谷歌卫星地图下载
  6. JavaScript之网页对话框
  7. 在多GPU系统上使用hashcat进行密码破解
  8. 总结两种最常用的python打包方式
  9. 智能温控风扇、DS18B20、原理图、PROTEUS仿真图、PCB图
  10. MAC下配置MAVEN环境变量配置