QT学习日记5——信号连接信号

学习视频链接

最新QT从入门到实战完整版|传智教育_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1g4411H78N?p=12

目录

一、简介

1.1 需要实现的内容

1.2 注意

二、编写代码

2.1 原来的代码

2.2 增加按钮点击的代码

2.3 无参信号和槽连接

2.4 断开连接

三、拓展


一、简介

1.1 需要实现的内容

按上课按钮,同学们来上课

1.2 注意

自定义信号部分参考前面 QT学习日记4

二、编写代码

2.1 原来的代码

QT学习日记5——信号连接信号_第1张图片

2.2 增加按钮点击的代码

QT学习日记5——信号连接信号_第2张图片

#include "widget.h"
#include 
#include 


Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    // 创建一个老师的对象
    this->zt = new Teacher(this);

    // 创建一个学生的对象
    this->st = new Student(this);

    void(Teacher:: *teacherSignal)(QString) = &Teacher::teach;
    void(Student:: *studentSlot)(QString) = &Student::learn;
    connect(zt, teacherSignal, st, studentSlot);
    ClassIsOn();

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

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

    // 点击按钮 触发下课
    connect(btn, &QPushButton::clicked, this, &Widget::ClassIsOn);

}

void Widget::ClassIsOn()
{
    emit zt->teach("数学");
}

Widget::~Widget()
{
    qDebug() << "Widget的析构调用";
}

2.3 无参信号和槽连接

添加这一部分代码,代码可以调用无参数槽函数

QT学习日记5——信号连接信号_第3张图片

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

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

连接逻辑

QT学习日记5——信号连接信号_第4张图片

2.4 断开连接

QT学习日记5——信号连接信号_第5张图片

三、拓展

1、信号可以连接信号

2、一个信号可以连接多个槽函数

一个信号可以打印信息和关闭窗口

3、多个信号可以连接一个槽函数

多个按钮都可以关闭窗口

4、信号和槽函数的参数 必须类型一致

5、信号和槽函数的参数个数 不要求一致,信号的参数 可以多余槽函数参数的个数

QT学习日记5——信号连接信号_第6张图片

你可能感兴趣的:(QT,学习)