Qt中通过connect()将信号发生者与信号接收者绑定在一起,格式如下:
connect(信号发生者,发生的信号,信号接收者,处理函数)
给出一个学生请老师吃饭,利用信号与槽机制实现。
软件需求:创建2个类 Teacher类,Student类
下课后, 老师Teacher zt 会发出(emit)一个信号:饿了hungry();
学生响应信号Student st 处理信号的槽函数:请客吃饭treat()。
如下:
//1)主函数 头文件one.h
#ifndef ONE_H
#define ONE_H
#include <QWidget>
#include "teacher.h"
#include "student.h"
class one : public QWidget
{
Q_OBJECT
public:
one(QWidget *parent = 0);
~one();
Teacher *zt;
Student *st;
void classIsOver();
};
#endif // ONE_H
//主函数 源文件one.cpp
#include "one.h"
//需求:创建2个类 Teacher类,Student类
//下课后, 老师Teacher zt 会发出一个信号 饿了
//学生响应信号Student st 处理信号的槽函数 请客吃饭
one::one(QWidget *parent)
: QWidget(parent)
{
zt = new Teacher(this);
st = new Student(this);
//连接 老师和学生
connect(zt,&Teacher::hungry,st,&Student::treat );
classIsOver();
}
one::~one()
{
}
void one::classIsOver()
{
//触发老师饿了的信号
emit zt->hungry();
}
//2)学生类 头文件Student.h
#ifndef STUDENT_H
#define STUDENT_H
#include <QObject>
class Student : public QObject
{
Q_OBJECT
public:
explicit Student(QObject *parent = 0);
signals:
public slots:
//自定义槽函数
//槽函数和信号匹配
void treat();
};
#endif // STUDENT_H
//学生类 源文件Student.cpp
#include "student.h"
#include <QDebug>
Student::Student(QObject *parent) :
QObject(parent)
{
}
void Student::treat()
{
qDebug()<<"请老师吃饭";
}
//3)老师类 头文件Student.h
#ifndef TEACHER_H
#define TEACHER_H
#include <QObject>
class Teacher : public QObject
{
Q_OBJECT
public:
explicit Teacher(QObject *parent = 0);
signals:
//自定义的信号,需要写到signals下
//返回类型必须为空,信号只需要声明,不需要实现
//信号可以有参数,可以重载
void hungry();
public slots:
};
#endif // TEACHER_H
//老师类 源文件Student.cpp
#include "teacher.h"
Teacher::Teacher(QObject *parent) :
QObject(parent)
{
}
效果如下: