初见QT---信号和槽(二)

带参数的自定义信号和槽

举例分析:响铃后,老师需要发出下课的信号,并且要带有放学参数,学生才能做出离开教室的反应

首先在teacher.h文件下重载信号函数

 1 #ifndef TEACHER_H
 2 #define TEACHER_H
 3 
 4 #include <QObject>
 5 
 6 class teacher : public QObject
 7 {
 8     Q_OBJECT
 9 public:
10     explicit teacher(QObject *parent = nullptr);
11 
12 signals:
13     //自定义信号 写到 signals下
14     //返回值是void 只需要声明,不需要实现
15     //可以有参数,可以重载
16     void classover();
17     void classover(QString leavesignal);
18 };
19 
20 #endif // TEACHER_H

然后在student.h下重载槽函数

 1 #ifndef STUDENT_H
 2 #define STUDENT_H
 3 
 4 #include <QObject>
 5 
 6 class student : public QObject
 7 {
 8     Q_OBJECT
 9 public:
10     explicit student(QObject *parent = nullptr);
11 
12 signals:
13 
14 public slots:
15     void leaveclass();
16     //声明  重载函数
17     void leaveclass(QString leavesignal);
18 };
19 
20 #endif // STUDENT_H    

其次在student.cpp下实现槽函数的功能

 1 #include "student.h"
 2 #include <QDebug>
 3 student::student(QObject *parent) : QObject(parent)
 4 {
 5 }
 6 void student::leaveclass(QString leavesignal)
 7 {
 8     //QString  ->char *    先转QByteArray (.tuUtf8) 再转 char *
 9     qDebug()<<"老师说"<<leavesignal.toUtf8().data();
10 }

最后在widget.cpp下连接信号和槽

 1 #include "widget.h"
 2 
 3 //Teacher类
 4 //Student类
 5 //铃声响了,老师发出下课的信号,学生接收信号做出离开教室的反应
 6 
 7 Widget::Widget(QWidget *parent)
 8     : QWidget(parent)
 9 {
10     this->zt=new teacher(this);
11     this->st=new student(this);
12     //连接  带参数的信号和槽
13     //指针  ->   地址
14     //函数指针  ->   函数地址
15     void (teacher:: *teachersignal)(QString)=&teacher::classover;
16     void (student:: *studentsignal)(QString)=&student::leaveclass;
17     connect(zt,teachersignal,st,studentsignal);
18     classringing();
19 }
20 
21 void Widget::classringing()
22 {
23     emit zt->classover("放学了");
24 }
25 
26 Widget::~Widget()
27 {
28 }

成果展示

posted @ 2020-05-21 21:09  学长的私房课  阅读(193)  评论(0编辑  收藏  举报