概述
信號和槽機制是QT的核心機制,要精通QT編程就必須對信號和槽有所了解。信號和槽是壹種高級接口,應用於對象之間的通信,它是QT的核心特性,也是QT區別於其它工具包的重要地方。信號和槽是QT自行定義的壹種通信機制,它獨立於標準的C/C++語言,因此要正確的處理信號和槽,必須借助壹個稱為moc(Meta Object Compiler)的QT工具,該工具是壹個C++預處理程序,它為高層次的事件處理自動生成所需要的附加代碼。
在我們所熟知的很多GUI工具包中,窗口小部件(widget)都有壹個回調函數用於響應它們能觸發的每個動作,這個回調函數通常是壹個指向某個函數的指針。但是,在QT中信號和槽取代了這些淩亂的函數指針,使得我們編寫這些通信程序更為簡潔明了。 信號和槽能攜帶任意數量和任意類型的參數,他們是類型完全安全的,不會像回調函數那樣產生core dumps。
所有從QObject或其子類(例如Qwidget)派生的類都能夠包含信號和槽。當對象改變其狀態時,信號就由該對象發射(emit)出去,這就是對象所要做的全部事情,它不知道另壹端是誰在接收這個信號。這就是真正的信息封裝,它確保對象被當作壹個真正的軟件組件來使用。槽用於接收信號,但它們是普通的對象成員函數。壹個槽並不知道是否有任何信號與自己相連接。而且,對象並不了解具體的通信機制。
妳可以將很多信號與單個的槽進行連接,也可以將單個的信號與很多的槽進行連接,甚至於將壹個信號與另外壹個信號相連接也是可能的,這時無論第壹個信號什麽時候發射系統都將立刻發射第二個信號。總之,信號與槽構造了壹個強大的部件編程機制。
信號和槽是類型安全的(簽名相符的),即信號和槽的參數類型個數必須相同,或者槽的參數的個數可以少於信號的參數個數,但缺少的參數必須是信號參數的最後壹個或幾個參數。