NO IMAGE

Qt提供了訊號槽機制用於完成介面響應的操作,是完成任意兩個Qt物件的通訊機制。

其中,訊號在某個特定情況或動作下被觸發,槽是等同於接收並處理訊號的函式。

例如,若要將一個視窗部件的變化情況通知給另一個視窗部件,則一個視窗部件傳送訊號,

另一個視窗部件的槽接收此訊號並進行相應的操作,就可以實現兩個視窗之間的通訊.

 

訊號與槽機制的連線方式:

1.一個訊號與另一個訊號連線:

connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1));

表示Object1的訊號1傳送可以觸發Object2的訊號1傳送

2.同一個訊號可以與多個槽連線:

connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slots2));
connect(Object1,SIGNAL(signal2),Object2,SIGNAL(slots1));

3.同一個槽可以響應多個訊號:

connect(Object1,SIGNAL(signal1),Object2,SIGNAL(slots2));
connect(Object3,SIGNAL(signal1),Object2,SIGNAL(slots2));

常用的連線方式:

connect(Object1,SIGNAL(signal1),Object2,SLOT(slots1));

siganl1為Object1的訊號,slots1為Object2的槽

 

 

訊號與槽機制的優點:

 1.型別安全。需要關聯的訊號和槽的簽名必須是等同的,即訊號的引數型別和引數個數與接收該訊號的槽引數型別和

  引數個數相同。

2.鬆散耦合。訊號和槽機制減弱了Qt物件的耦合度。激發訊號的Qt物件無需知道是那個物件的那個槽需要接收它發

出的訊號,它只需做的是,在適當的時間傳送適當的訊號就可以了。

 

一個類若要支援訊號與槽,就必須從QObject或QObject的子類繼承。Qt訊號和槽機制不支援對模板的使用。

 

訊號與槽機制的效率:

 1.需要定位接收訊號的物件。

 2.安全的遍歷所有的關聯(如果一個訊號關聯多個槽的情況)。

 3.編組/解組傳遞的引數。

 4.多執行緒的時候,訊號可能需要排隊等待。