信号和槽

一、信号和槽的简介

1、需要四个参数:以点击按钮关闭窗口来进行演示

  1. 信号的发送者:相当于按钮
  2. 发送的具体信号内容:相当于点击的动作
  3. 信号的接收方:相当于该窗口
  4. 对信号进行处理操作(就是指槽):相当于关闭窗口

2、需要connect进行连接
信号发送方信号接收方之间本身是没有关联的。信号槽的优点就在于松散耦合的方式,因此需要connect来进行连接,将两端进行耦合在一起。

3、通过点击关闭窗口来进行演示

#include "mywidget01.h"
#include"mypushbutton.h" //将自定义类的头文件添加进来

myWidget01::myWidget01(QWidget *parent)
    : QWidget(parent)
{
    myPushButton *myBtn=new myPushButton;
    myBtn->setParent(this);
    myBtn->setText("关闭窗口");
    myBtn->move(10,20);

    /*
    参数1:信号的发送者,就是该按钮;参数2:发送的信号内容,就是点击事件,在此传入的就是事件函数地址
    参数3:信号的接受方,就是该应用窗口;参数4:就是槽,也即信号的处理操作
    */
    connect(myBtn,&myPushButton::clicked,this,&myWidget01::close);

    /*
    // 由于myPushButton继承自QPushButton,myWidget01继承自QWidget。所以可以直接使用其父类来代替子类。
    connect(myBtn,&QPushButton::clicked,this,&QWidget::close);
    */

}

myWidget01::~myWidget01()
{

}

二、自定义信号和槽

1、具体场景

  1. 下课后老师触发一个信号:信号发送者
  2. 饿了:信号具体内容
  3. 学生响应信号:信号接收者
  4. 去吃饭:信息处理,即槽函数

2、具体实现过程

1)、分别创建两个类TeacherStudents。其中Teacher为信号方,Students是信号处理者,即为槽函数。
2)、 生成的文件结构如下
信号和槽_第1张图片
3)、teacher.h文件中 :由于Teacher类是信号方,所以需要将对应函数写在信号 signals: 下面。由于信号函数只需要声明,无需定义,所以teacher.cpp文件无需任何改变
信号和槽_第2张图片
4)、students.h文件为信号接收处理方,在其中写槽函数的声明。在students.cpp文件中来写槽函数的实现。
信号和槽_第3张图片
信号和槽_第4张图片
5)、widget.h文件中声明老师和学生的对象,并声明一个下课的函数
信号和槽_第5张图片
6)、widget.cpp文件中进行实现对应的操作
信号和槽_第6张图片
7)、运行结果如下
在这里插入图片描述


三、自定义信号和槽发生重载

当自定义的信号和槽发生重载时,需要用函数指针来指向函数地址,来明确告诉connect要调用的是哪一个函数。
信号和槽_第7张图片
信号和槽_第8张图片
信号和槽_第9张图片
信号和槽_第10张图片
运行结果如下
在这里插入图片描述

你可能感兴趣的:(Qt)