QT从入门到实战x篇_08_信号连接信号(可以使用信号连接信号的方式触发槽函数; 使用disconnect(...)就可以实现已连接信号和槽的断开)

接上篇QT从入门到实战x篇_07_自定义信号及槽的重载(带参数的信号和槽的使用方法;将QString转换为Char*的结果)中介绍了自定义信号和槽函数的重载,本篇将会介绍信号连接信号以及断开连接的方法。

总结:

  1. 可以使用信号连接信号的方式触发槽函数;
  2. 使用disconnect(...)就可以实现已连接信号和槽的断开。

前面几篇中程序一旦运行就会触发下课并发送信号,现在将需求进行更改,在点击一个按钮之后再触发下课

widget.cpp中内容如下:

#include "widget.h"
#include "ui_widget.h"
#include "teacher.h"
#include "student.h"
#include <QPushButton>

//Teacher类 老师类
//Student类 学生类
//场景:下课后 老师触发信号 饿了 学生响应信号 请客吃饭

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //创建老师对象
    zt=new Teacher(this); //this用来指定父亲的对象
    //创建学生对象
    st=new Student(this);

    //老师饿了 学生请客连接
//    connect(zt,&Teacher::hungry,st,&Student::treat);

    //函数指针指向函数地址
    void(Teacher::*teacherSignal)(QString)=&Teacher::hungry;
    void(Student::*studentSlot)(QString)=&Student::treat;
    connect(zt,teacherSignal,st,studentSlot);


    //调用下课函数
    classIsOver();

    //点击一个下课的按钮再触发下课
    QPushButton* btn=new QPushButton("xiake",this);

    //重置窗口大小
    this->resize(600,400);

    connect(btn,&QPushButton::clicked,this,&Widget::classIsOver);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::classIsOver()
{
    //下课函数 调用后 触发老师饿了的信号
    emit zt->hungry(QString::fromLocal8Bit("宫保鸡丁"));
}

运行结果:点击“xiake”就会输出“下课了,老师要吃 宫保鸡丁”
在这里插入图片描述
上述的过程还是采用信号调用槽函数的方式。

1. 信号连接信号


下面代码使用无参槽函数并将按钮点击信号与另一个信号连接,从而实现“请老师吃饭的槽函数”

    //无参信号和槽连接
    void(Teacher::*teacherSignal2)(void)=&Teacher::hungry;
    void(Student::*studentSlot2)(void)=&Student::treat;
    connect(zt,teacherSignal2,st,studentSlot2);

    //信号连接信号
    connect(btn,&QPushButton::clicked,zt,teacherSignal2);

运行结果:调用了另一个信号对应的槽函数
在这里插入图片描述

  • 信号连接信号的逻辑关系如下:
    在这里插入图片描述

2. 断开信号和槽连接


使用 disconnect(...)就可以实现已连接信号和槽的断开。

    //无参信号和槽连接
    void(Teacher::*teacherSignal2)(void)=&Teacher::hungry;
    void(Student::*studentSlot2)(void)=&Student::treat;
    connect(zt,teacherSignal2,st,studentSlot2);

    //信号连接信号
    connect(btn,&QPushButton::clicked,zt,teacherSignal2);

    //信号断开
    disconnect(zt,teacherSignal2,st,studentSlot2);

运行结果:因为zt的信号与st的连接断开了,因此点击按钮不会有任何输出

3. 学习视频地址:QT从入门到实战x篇_08_信号连接信号

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月旧城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值