信號槽介紹

signal & slot

當某個元件狀態發生改變,我們希望另一個元件作出對應行為,這時可以使用Qt獨有的signal & slot機制來達到,比如按鈕被點擊了一下,此時會發出一個信號(signal),這種信號像廣播一樣目的,如果有對像對這個信號感興趣,就用自己的一個成員函式成為槽(slot)來響應這個信號,而sinal和slot透過connect()函式來進行連結。 由於使用signal和slot時,會像廣播般發出和接受訊息,所以物件不用知道彼此的存在,只要專注在信號發出和接收就好,降低了物件之間的耦合度。

Signal&Slot


信號槽特點

  1. 正常一個發出訊號和一個接收: connect(Object1,signal1,Object2,slot1);
  2. 可以多個發出訊號和一個接收: connect(Object1,signal1,Object2,slot1); connect(Object1,signal2,Object2,slot1);
  3. 可以一個發出訊號和多個接收: connect(Object1,signal1,Object2,slot1); connect(Object1,signal1,Object2,slot2);
  4. 可以一個發出訊號,觸發另一個發出信號: connect(Object1,signal1,Object2, signal2);

signal和slot函式的參數型態必須相同,且兩個函式參數的接受收放順序相同,slot函式的參數個數可以少於signal函式,此時signal函式多餘的參數無法傳給slot函式。

Qt中有些元件有預設signal,方便我們撰寫程式碼,例如QPushButton若被按下,會發出clicked()的signal,QLineEdit內容若改變,會發出textChanged(QString)的signal。

如果要斷開signal和slot間的連接,則使用disconnect():

disconnect(Object1,signal1,Object2,slot1);