1. 程式人生 > 其它 >QT自學記錄(2)——訊號與槽

QT自學記錄(2)——訊號與槽

一. 訊號和槽的定義和性質

  訊號(Signal),顧名思義,是特定情況下被觸發的事件。譬如老師在下課時會肚子餓,那麼肚子餓就是一種訊號;而PushButton會被點選,點選(clicked())也是一種訊號;ComboBox選擇的列表項發生變化時,會觸發CurrentIndexChanged()的訊號。

  與之對應,一個物件發出訊號,那麼另一個物件(也可以是發出訊號的物件本身)會執行相應的動作,而這些相應的動作所組成的函式,就叫槽(Slot)。當訊號被髮射的時候,就可以觸發對應的槽函式。譬如老師在下課時發出(emit)肚子餓的訊號,可以觸發老師肚子叫(grumble())的槽函式;此時也有可能有學生髮現老師餓了,從而請老師吃飯,觸發學生的請客(treat()

)槽函式。

  從上面的說明我們不難看出訊號和槽的一些性質:

  1. 一個訊號可以與多個槽對應,也可以不對應任何槽函式;
  2. 訊號可以連線槽,也可以連線新的訊號;
  3. 槽函式的執行者可以為訊號發出者本身。

  此外,訊號和槽還具有如下的特性:

  1. 訊號和槽函式均可以帶引數,因而可以發生過載(過載可能發生的問題將會在後面提到)
  2. 訊號只需使用signal關鍵字宣告,無需實現,但槽函式必須在後續實現;
  3. 訊號和槽函式均是無返回值的void函式;
  4. 訊號和槽函式含有的引數數量可以不同,但是槽函式的引數必須不多於訊號的引數;
  5. 訊號和槽函式的引數必須一一對應。

二. 訊號的傳送、訊號和槽的連線