信号和槽
信號(hào)槽是 Qt 框架引以為豪的機(jī)制之一。所謂信號(hào)槽,實(shí)際就是觀察者模式。當(dāng)某個(gè)事件發(fā)生之后,比如,按鈕檢測(cè)到自己被點(diǎn)擊了一下,它就會(huì)發(fā)出一個(gè)信號(hào)(signal)。這種發(fā)出是沒(méi)有目的的,類似廣播。如果有對(duì)象對(duì)這個(gè)信號(hào)感興趣,它就會(huì)使用連接(connect)函數(shù),意思是,將想要處理的信號(hào)和自己的一個(gè)函數(shù)(稱為槽(slot))綁定來(lái)處理這個(gè)信號(hào)。也就是說(shuō),當(dāng)信號(hào)發(fā)出時(shí),被連接的槽函數(shù)會(huì)自動(dòng)被回調(diào)。
connect(&b1, &QPushButton::pressed, this, &MainWidget::close); 參數(shù)一為信號(hào)發(fā)送者,二為信號(hào)。三為信號(hào)接收者,四為槽函數(shù)(接收到信號(hào)后執(zhí)行的函數(shù))
此功能為:當(dāng)按下按鈕b1時(shí),關(guān)閉主窗口。
自定義槽函數(shù):
槽函數(shù)和信號(hào)必須一致:沒(méi)有返回值。參數(shù)一致。
自定義信號(hào):
signals:void Mysignal();//這是一個(gè)信號(hào),只需定義,無(wú)需實(shí)現(xiàn)。 可以重載void Mysignal(int, QString);?
主窗口向子窗口發(fā)送信號(hào):
connect(&b, &QPushButton::released, &SubWidget, &SubWidget::GetSlot);子窗口向主窗口發(fā)送信號(hào):
必須先定義信號(hào);再編寫一個(gè)信號(hào)發(fā)送函數(shù):
void SubWidget::SendSlot() {emit Mysignal();//發(fā)送信號(hào)emit Mysignal(250, "I am a little boy"); }再如下發(fā)送:
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的新功能,可實(shí)現(xiàn)對(duì)重載信號(hào)的接收。//必須在其頭文件.h中如下定義槽函數(shù),并實(shí)現(xiàn) public slots: void delSub(); void delSig(int, QString);
?
轉(zhuǎn)載于:https://www.cnblogs.com/lr1402585172/p/10607689.html
總結(jié)
- 上一篇: 成都欢乐谷白天的票可以玩到晚上吗
- 下一篇: select2插件,取何获得下拉框的值?