通常使用的connect,實際上最后一個參數使用的是Qt::AutoConnection類型:Qt支持6種連接方式。當中3中最主要:
1.Qt::DirectConnection(直連方式)(信號與槽函數關系類似於函數調用。同步運行)
當信號發出后。對應的槽函數將馬上被調用。emit語句后的代碼將在全部槽函數運行完成后被運行。
2.Qt::QueuedConnection(排隊方式)(此時信號被塞到信號隊列里了,信號與槽函數關系類似於消息通信。異步運行)
當信號發出后。排隊到信號隊列中,需等到接收對象所屬線程的事件循環取得控制權時才取得該信號。調用對應的槽函數。emit語句后的代碼將在發出信號后馬上被運行。無需等待槽函數運行完成。
3.Qt::AutoConnection(自己主動方式)
Qt的默認連接方式,假設信號的發出和接收這個信號的對象同屬一個線程,那個工作方式與直連方式同樣。否則工作方式與排隊方式同樣。
4.Qt::BlockingQueuedConnection(信號和槽必須在不同的線程中。否則就產生死鎖)
這個是全然同步隊列僅僅有槽線程運行完畢才會返回。否則發送線程也會一直等待,相當於是不同的線程能夠同步起來運行。
5.Qt::UniqueConnection
與默認工作方式同樣。僅僅是不能反復連接同樣的信號和槽。由於假設反復連接就會導致一個信號發出。相應槽函數就會運行多次。
6.Qt::AutoCompatConnection
是為了連接Qt4與Qt3的信號槽機制兼容方式。工作方式與Qt::AutoConnection一樣。
假設這個參數不設置的話。默認表示的是那種方式呢?
沒加的話與直連方式同樣:當信號發出后,對應的槽函數將馬上被調用。emit語句后的代碼將在全部槽函數運行完成后被運行。在這個線程內是順序運行、同步的。可是與其他線程之間肯定是異步的了。假設使用多線程,仍然須要手動同步。