文件目录
1、无参数
seconddemo.h
#ifndef SECONDDEMO_H
#define SECONDDEMO_H
#include <QMainWindow>
#include "teacher.h"
#include "student.h"
namespace Ui {
class seconddemo;
}
class seconddemo : public QMainWindow
{
Q_OBJECT
public:
explicit seconddemo(QWidget *parent = 0);
~seconddemo();
Teacher * zt;
Student * st;
void classclrea();
private:
Ui::seconddemo *ui;
};
#endif // SECONDDEMO_H
studnet.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
//需要声明,需要实现
//可重载
void treat();
};
#endif // STUDENT_H
student.h
#ifndef TEACHER_H
#define TEACHER_H
#include <QObject>
class Teacher : public QObject
{
Q_OBJECT
public:
explicit Teacher(QObject *parent = 0);
//自定义信号
signals:
//自定义信号写法:
//1、返回void
//2、信号只需要声明,不需要实现
//3、自定义信号可以发生重载
void hungry();
public slots:
};
#endif // TEACHER_H
seconddemo.cpp
#include "seconddemo.h"
#include "ui_seconddemo.h"
seconddemo::seconddemo(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::seconddemo)
{
ui->setupUi(this);
zt = new Teacher(this);
st = new Student(this);
connect(zt,&Teacher::hungry,st,&Student::treat);
classclrea();
}
void seconddemo::classclrea()
{
//自定义信号触发
emit zt->hungry();
}
seconddemo::~seconddemo()
{
delete ui;
}
studnet.cpp
#include "student.h"
#include <QDebug>
Student::Student(QObject *parent) : QObject(parent)
{
}
void Student::treat()
{
qDebug()<<"老师真好!"<<endl;
}
teacher.cpp
#include "teacher.h"
#include <QDebug>
Teacher::Teacher(QObject *parent) : QObject(parent)
{
}
运行结果
2、有参数
修改
student.h
teacher.h
seconddemo.cpp
#include "seconddemo.h"
#include "ui_seconddemo.h"
seconddemo::seconddemo(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::seconddemo)
{
ui->setupUi(this);
zt = new Teacher(this);
st = new Student(this);
// connect(zt,&Teacher::hungry,st,&Student::treat);
//有参数的信号槽
//指针->地址
//函数地址 -> 函数地址
void (Teacher:: * teacherSignals )(QString) = &Teacher::hungry;
void (Student:: * studentSlot )(QString) = &Student::treat;
connect(zt,teacherSignals,st,studentSlot);
classclrea();
}
void seconddemo::classclrea()
{
//自定义信号触发
emit zt->hungry("小鸡炖蘑菇");
}
seconddemo::~seconddemo()
{
delete ui;
}
studnet.cpp
打印出来:
老师真好! “小鸡炖蘑菇”
修改为:
void Student::treat(QString foodName)
{
qDebug()<<"老师真好!"<<foodName.toUtf8()<<endl;
}
打印出来:
老师真好! “\xE5\xB0\x8F\xE9\xB8\xA1\xE7\x82\x96\xE8\x98\x91\xE8\x8F\x87”
修改为
void Student::treat(QString foodName)
{
qDebug()<<"老师真好!"<<foodName.toUtf8().data()<<endl;
}
打印出