Qt 的信號與槽(純乾貨)
- 2020 年 4 月 1 日
- 筆記
接觸Qt斷斷續續有些時間了,總看了一堆的文章說信號槽的概念,心裏就想罵人,做為一個初學者,最重要的就是怎麼寫代碼,寫代碼寫多了,再去看理論,有時水到渠成的就明白那些理論了。但所有講信號槽的都把一堆信號槽的好處說一通,把MFC的消息機制貶一通。具體代碼應該怎麼實現信號槽輕飄飄的就忽略過去了。
直接開始吧!
信號槽是為了實現兩個對象之間的通信機制,說白了就是比如一個按鈕對象點擊了一下想告訴主界面並讓主界面回應這個按鈕的點擊動作,怎麼辦呢?
第一步代碼建立連接:
註:這是用代碼建立信號槽連接,還有一種方法在後續裏面補充。
第二步代碼實現槽函數:(註:這一步可有可無哦,為什麼?繼續往下看。)
public slots:
……………….
以上就是最簡單的信號槽實現,下面繼續細說!
1、茲要是從QObject繼承的類都可以有信號槽
2、第一步的連接函數一般放在構造函數里,這一點不是必需的
3、SIGNAL是個宏,括號里的信號不同的對象有不同,可在Qt 助手裡查找,如想查找QPushButton類的對象有哪些信號,可打開Qt助手,
4、現在說說第二步為什麼可以沒有,如果接收信號的槽是對象預定義的,那麼就沒有第二步的代碼,直接將槽函數名寫的 SLOT的括號里即可
5、建立信號槽可以用connect()函數,也可以在Qt設計師環境里用拖拽實現,如下
註:因為我是用VS里安裝Qt插件的方式開發,所以打開Qt設計師的方法是雙擊 ***.ui 文件的方式。
5.1 菜單 Edit -> 編輯信號/槽
5.2 進入 信號槽編輯模式 後,用鼠標左鍵按住發射信號的對象,如QPushButton/QWidget 等,然後拖拽鼠標移動到接收信號的對象
5.3 鬆開鼠標會彈出一個窗口,在這個彈出的窗口裡選擇信號和槽,即可
總結:信號槽的實現方式我也就知道這兩種,相對於MFC過渡的人來說,connect()就象MFC的 BEGIN_MESSAGE_MAP宏里寫的代碼,槽函數就象MFC里的響應函數,信號就類似MFC的消息。至於信號槽的原理我覺得
可以在學會實現信號槽代碼後,抽空慢慢體會。先有實踐,再理解原理。