下面舉叫外賣的例子來說明什么是信號和槽,比如:
①比如到午飯時間了,某宅男餓了——由不餓到餓,是一個狀態的變化,肚子餓了就相當於是一個信號。誰都會餓的,每個人都可以發這類信號。注意信號只是一個空想,沒 東西吃是填不飽肚子的。餓了怎么辦,准備叫外賣。
②街上餐館很多,都希望多做點生意,送外賣也是常事——做好飯送外賣就是槽函數。這個送外賣功能,餐館一般都是有的,但誰來買送給誰,這個暫時定不了。如果餐館飯 做得好,但沒人吃那也是不行的。
③食客餓了(信號),餐館有送飯服務(槽函數),二者怎么溝通呢?通常我們都是打電話,Qt 把這個過程叫信號和槽的關聯(connect)。雖然我們每次叫外賣都要撥一長串號碼,但 Qt 關聯比我們打電話方便,它只需要將信號關聯具體某家餐館外賣服務一次,以后都是自動撥號的。Qt 對象的信號和槽關聯好之后,源頭只需要發個信號,叫一聲“我餓了”,connect 函數會自動撥號,餐館立刻就送餐過來。
信號和槽函數在進行關聯的時候,二者的參數需要一致,不能我叫西紅柿雞蛋的蓋澆飯,餐館給送蘭州拉面,那是不行的。多個對象的信號和槽函數在參數匹配的情況下,它 們之間的關聯可以是一對一,一對多(某吃貨可以同時叫多個餐館的飯),多對一(多個人可以同時訂某家餐館的飯),所以關聯是比較自由的。