学习视频链接
最新QT从入门到实战完整版|传智教育_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1g4411H78N?p=10&spm_id_from=pageDriver
目录
一、创建需要的类
1.1 需要实现的效果
1.2 操作
二、自定义信号和槽
三、自定义的信号和槽发生重载的解决
3.1 基本实现
3.2 细节处理
// Teacher类 老师类
// Student类 学生类
// 上课老师会触发一个信号:讲课
// 学生响应信号:请客吃饭
右键—>添加新文件
继承 QObject 类
声明:
实现:
头文件中添加类的指针
创建两个对象,但是没有触发事件
头文件里面写一个触发的函数
实现这个触发的函数并且调用这个函数
代码:
#include "widget.h"
#include "ui_widget.h"
// Teacher类 老师类
// Student类 学生类
// 上课老师会触发一个信号:讲课
// 学生响应信号:请客吃饭
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
// 创建一个老师的对象
this->zt = new Teacher(this);
// 创建一个学生的对象
this->st = new Student(this);
// 老师讲课,学生开始学习
// connect(zt, &Teacher::teach, st, &Student::learn);
// 调用下课函数
// classIsOn();
// 因为teach有两个版本,有二义性,所以编译器不知道找哪个版本,所以下面的写法是错误的
// connect(zt, &Teacher::teach, st, &Student::learn);
// 这个时候就需要函数指针
void(Teacher:: *teacherSignal)(QString) = &Teacher::teach;
void(Student:: *studentSlot)(QString) = &Student::learn;
connect(zt, teacherSignal, st, studentSlot);
classIsOn();
}
void Widget::classIsOn()
{
// 上课函数,调用后触发老师讲课的信号
// emit zt->teach();
emit zt->teach("数学");
}
Widget::~Widget()
{
delete ui;
}