信號和槽


  信號槽是 Qt 框架引以為豪的機制之一。所謂信號槽,實際就是觀察者模式。當某個事件發生之后,比如,按鈕檢測到自己被點擊了一下,它就會發出一個信號(signal)。這種發出是沒有目的的,類似廣播。如果有對象對這個信號感興趣,它就會使用連接(connect)函數,意思是,將想要處理的信號和自己的一個函數(稱為槽(slot))綁定來處理這個信號。也就是說,當信號發出時,被連接的槽函數會自動被回調

  connect(&b1, &QPushButton::pressed, this, &MainWidget::close);  參數一為信號發送者,二為信號。三為信號接收者,四為槽函數(接收到信號后執行的函數)

     此功能為:當按下按鈕b1時,關閉主窗口。

自定義槽函數:

  槽函數和信號必須一致:沒有返回值。參數一致。

自定義信號:

signals:
    void Mysignal();//這是一個信號,只需定義,無需實現。  可以重載
    void Mysignal(int, QString);

 

主窗口向子窗口發送信號:

connect(&b, &QPushButton::released, &SubWidget, &SubWidget::GetSlot);

子窗口向主窗口發送信號:

  必須先定義信號;再編寫一個信號發送函數:

void SubWidget::SendSlot()
{
    emit Mysignal();//發送信號
    emit Mysignal(250, "I am a little boy");
}

  再如下發送:

connect(&b, &QPushButton::released, this, &SubWidget::SendSlot);

  主窗口接收:

connect(&w, SIGNAL(Mysignal()), this, SLOT(delSub()));

connect(&w, SIGNAL(Mysignal(int,QString)), this, SLOT(delSig(int,QString)));//這是QT5的新功能,可實現對重載信號的接收。
//必須在其頭文件.h中如下定義槽函數,並實現
public slots:
    void delSub();
    void delSig(int, QString);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM