信號槽是 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);