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)
{
}
效果如下: