QT自學記錄(2)——訊號與槽
阿新 • • 發佈:2021-08-13
一. 訊號和槽的定義和性質
訊號(Signal),顧名思義,是特定情況下被觸發的事件。譬如老師在下課時會肚子餓,那麼肚子餓就是一種訊號;而PushButton會被點選,點選(clicked())也是一種訊號;ComboBox選擇的列表項發生變化時,會觸發CurrentIndexChanged()的訊號。
與之對應,一個物件發出訊號,那麼另一個物件(也可以是發出訊號的物件本身)會執行相應的動作,而這些相應的動作所組成的函式,就叫槽(Slot)。當訊號被髮射的時候,就可以觸發對應的槽函式。譬如老師在下課時發出(emit)肚子餓的訊號,可以觸發老師肚子叫(grumble())的槽函式;此時也有可能有學生髮現老師餓了,從而請老師吃飯,觸發學生的請客(treat() )槽函式。
從上面的說明我們不難看出訊號和槽的一些性質:
- 一個訊號可以與多個槽對應,也可以不對應任何槽函式;
- 訊號可以連線槽,也可以連線新的訊號;
- 槽函式的執行者可以為訊號發出者本身。
此外,訊號和槽還具有如下的特性:
- 訊號和槽函式均可以帶引數,因而可以發生過載(過載可能發生的問題將會在後面提到)
- 訊號只需使用signal關鍵字宣告,無需實現,但槽函式必須在後續實現;
- 訊號和槽函式均是無返回值的void函式;
- 訊號和槽函式含有的引數數量可以不同,但是槽函式的引數必須不多於訊號的引數;
- 訊號和槽函式的引數必須一一對應。