《QT學習筆記 —— 8. QT中的信號和槽》

在閱讀本文之前,建議先花三五分鐘閱讀下《QT學習筆記 —— 2. 使用嚮導創建QT項目》

信號槽是 Qt 框架引以爲豪的機制之一。所謂信號槽,實際就是觀察者模式。當某個事件發生之後,比如,按鈕檢測到自己被點擊了一下,它就會發出一個信號(signal)。這種發出是沒有目的的,類似廣播。如果有對象對這個信號感興趣,它就會使用連接(connect)函數,意思是,將想要處理的信號和自己的一個函數(稱爲槽(slot))綁定來處理這個信號。也就是說,當信號發出時,被連接的槽函數會自動被回調

 

一、QT中標準信號和槽

03_SignalAndSlot.pro

 

mainwidget.h

 

main.cpp

 

mainwidget.cpp

編譯運行結果如下:

點擊close按鈕後,主窗口就關閉了。我們的代碼邏輯就是這樣的,點擊close按鈕,就會發送pressed信號,然後我們的主窗口就對pressed信號進行處理,是通過QT系統標準槽函數進行處理的,我們也可以自定義信號和槽函數。

信號槽要求信號和槽的參數一致,所謂一致,是參數類型一致。如果不一致,允許的情況是,槽函數的參數可以比信號的少,即便如此,槽函數存在的那些參數的順序也必須和信號的前面幾個一致起來。這是因爲,你可以在槽函數中選擇忽略信號傳來的數據(也就是槽函數的參數比信號的少),但是不能說信號根本沒有這個數據,你就要在槽函數中使用(就是槽函數的參數比信號的多,這是不允許的)。

注:信號沒有返回值

 

下面簡單說下,查看QT的幫助文檔。

1. 將鼠標放到QPushButton上面,連續按兩次F1,

 

2. 點擊QAbstractButton,點擊Signals

到這裏我們就看到我們想看到的信號了。可以進去查看不同的信號,在什麼場景被觸發。

 

3. 退出幫助文檔,按鍵盤左上角的ESC按鍵

 

一、QT中自定義槽函數

mainwidget.h

mainwidget.cpp

編譯運行結果如下:

自定義的槽函數,和普通的函數沒有什麼區別。可以是任意的成員函數,普通全局函數,靜態函數。槽函數需要和信號一致(參數,返回值)。由於信號都是沒有返回值,所以,槽函數一定沒有返回值。

 

三、信號槽的更多用法

(1)一個信號可以和多個槽相連

如果是這種情況,這些槽會一個接一個的被調用,但是它們的調用順序是不確定的。

(2)多個信號可以連接到一個槽

只要任意一個信號發出,這個槽就會被調用

(3)一個信號可以連接到另外的一個信號

當第一個信號發出時,第二個信號被髮出。除此之外,這種信號-信號的形式和信號-槽的形式沒有什麼區別。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章