信號和槽

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:
    //自定義信號  寫到slots下,低版本可以卸載public下
    //返回值是void  需要聲明  也需要實現(xiàn)
    //可以有參數(shù)悯仙,可以重載
    void treat();
    void treat(QString FoodName);
};

#endif // STUDENT_H

student.cpp :

#include "student.h"
#include<QDebug>


Student::Student(QObject *parent) :
    QObject(parent)
{
}
void Student::treat()
{
    qDebug()<<"請老師吃飯";


}
void Student::treat(QString FoodName)
{
    qDebug()<<"請老師吃:"<<FoodName.toUtf8().data();


}

teacher.h :

#ifndef TEACHER_H
#define TEACHER_H

#include <QObject>

class Teacher : public QObject
{
    Q_OBJECT
public:
    explicit Teacher(QObject *parent = 0);

signals:
    //自定義信號  寫到signal下
    //返回值是void  只需要聲明  不需要實現(xiàn)
    //可以有參數(shù)民傻,可以重載
    void hungry();

    void hungry(QString FoodName);

public slots:

};

#endif // TEACHER_H

teacher.cpp:

#include "teacher.h"

Teacher::Teacher(QObject *parent) :
    QObject(parent)
{
}

widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include"teacher.h"
#include"student.h"



namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    Teacher * zt;
    Student * st;

    void ClassOver();

};

#endif // WIDGET_H

widget.cpp :

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>


//Teacher 類  老師類
//Student 類  學生類

// 下課了  老師發(fā)出一個餓了的信號   學生請吃飯


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //創(chuàng)建老師對象
    this ->zt = new Teacher(this);
    //創(chuàng)建學生對象
    this ->st = new Student(this);

//    //老師餓了,學生請吃飯連接
//    //發(fā)個信號
//    connect(zt,&Teacher::hungry,st,&Student::treat);
//    ClassOver();

    //重載時  連接信號和槽 需要定義一個指針
    void(Teacher:: *teacherSingal)(QString)= &Teacher::hungry;
    void(Student:: *studentSlot)(QString) = &Student::treat;
    connect(zt,teacherSingal,st,studentSlot);
    //ClassOver();

    //點擊一個下課按鈕
    QPushButton *btn = new QPushButton("下課",this);
    resize(600,400);


    //點擊按鈕觸發(fā)下課
    //connect(btn,&QPushButton::clicked,this,&Widget::ClassOver);

    //無參數(shù)信號和槽連接
    void(Teacher:: *teacherSingal2)(void)= &Teacher::hungry;
    void(Student:: *studentSlot2)(void) = &Student::treat;
    connect(zt,teacherSingal2,st,studentSlot2);

    //信號連接信號
    connect(btn,&QPushButton::clicked,zt,teacherSingal2);


    //斷開信號
    //disconnect(zt,teacherSingal2,st,studentSlot2);

    //拓展
    //1、信號可以連接信號
    //2、一個信號可以連接多個槽函數(shù)
    //3、多個信號也可以連接一個槽函數(shù)
    //4澈蟆、信號和槽函數(shù)的參數(shù)  一一對應(yīng)的
    //5趟径、信號的參數(shù)個數(shù)可以多余槽函數(shù)參數(shù)的個數(shù)瘪吏,但是有的參數(shù)類型要對應(yīng)


    //版本4的信號和槽連接函數(shù)
    //connect(zt,SIGNAL(hungry()),st,SLOT(treat()));
    //4版本優(yōu)點,參數(shù)直觀蜗巧,缺點:編譯器對類型不做檢測(前后參數(shù)不一樣不做檢測)


// //Lambda表達式知識  匿名函數(shù)
//
//    [=](){
//        btn->setText("aa");
//    };          //沒()只是起到聲明作用掌眠;

//    [=](){
//        btn->setText("aa");
//    }();        //有()才會執(zhí)行

    //mutable關(guān)鍵字永續(xù)修飾值傳遞的變量,修改的時拷貝,而不是值,例子沒寫



    //利用lambda表達式實現(xiàn)點擊按鈕 關(guān)閉窗口

    QPushButton *btn2 = new QPushButton(this);
    btn2->setText("關(guān)閉窗口");
    btn2->move(100,0);

    //connect(btn2,&QPushButton::clicked,this,&Widget::close);

    connect(btn2,&QPushButton::clicked,this,[=](){          //若用lambda表達式連接  若第三個參數(shù)是this可以省略
        //this->close();
        emit zt->hungry("宮保雞丁");
        btn2->setText("bye!");

    });











}

Widget::~Widget()
{
    delete ui;
}

void Widget::ClassOver()
{
   // emit zt->hungry();
    emit zt->hungry("宮保雞丁");
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市幕屹,隨后出現(xiàn)的幾起案子蓝丙,更是在濱河造成了極大的恐慌,老刑警劉巖望拖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渺尘,死亡現(xiàn)場離奇詭異,居然都是意外死亡靠娱,警方通過查閱死者的電腦和手機沧烈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門掠兄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來像云,“玉大人,你說我怎么就攤上這事蚂夕⊙肝埽” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵婿牍,是天一觀的道長侈贷。 經(jīng)常有香客問我,道長等脂,這世上最難降的妖魔是什么俏蛮? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮上遥,結(jié)果婚禮上搏屑,老公的妹妹穿的比我還像新娘。我一直安慰自己粉楚,他們只是感情好辣恋,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著模软,像睡著了一般伟骨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上燃异,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天携狭,我揣著相機與錄音,去河邊找鬼回俐。 笑死逛腿,一個胖子當著我的面吹牛壹瘟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鳄逾,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼稻轨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雕凹?” 一聲冷哼從身側(cè)響起殴俱,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枚抵,沒想到半個月后线欲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡汽摹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年李丰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逼泣。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡趴泌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拉庶,到底是詐尸還是另有隱情嗜憔,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布氏仗,位于F島的核電站吉捶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏皆尔。R本人自食惡果不足惜呐舔,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慷蠕。 院中可真熱鬧珊拼,春花似錦、人聲如沸砌们。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浪感。三九已至昔头,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間影兽,已是汗流浹背揭斧。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讹开。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓盅视,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旦万。 傳聞我的和親對象是個殘疾皇子闹击,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355