Qt的信號與槽案例

        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)
{
}

        效果如下:
在這裏插入圖片描述

發佈了524 篇原創文章 · 獲贊 798 · 訪問量 208萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章