每日一言
????????相信自己,你比想象中更接近成功,繼續勇往直前吧!
那么我們開始用這4種方法進行信號與槽的通信
第一種信號與槽的綁定方式
我們將按鍵右鍵后轉到槽
會自動跳轉到這個widget.h文件里面并自動生成了定義,我們要記住我們這個按鈕叫做這個UIbtn,所以生成的叫做這個on_UIbtn_clicked();切記,我們這個函數名字不能自己去修改,因為這個函數的名字與我們的按鈕對象的名字相同,這個是一種命名格式on_UIbtn_clicked();(on_對象名_信號名稱)
這個只是聲明,沒有實現,所以我們也需要進行實現,右鍵這個聲明里面有個Refactor重構,里面有個在widget.cpp添加定義,那么我們就可以實現功能了,比如以下的圖
所以我們測試一下,點擊這個按鈕,那么就會實現彈出信息
沒有問題
第二種信號與槽的綁定方式
我們要切記,這些信號與槽進行連接的代碼需要在構造函數進行,實現,
這個代碼是什么意思呢,ui的Connectbtn這個對象,發送的信號為clicked(),接受方為this,也就是這個窗口,SLOT里面就是接收方設置的槽函數,這個槽函數的話我們需要自己定義出來
在widget里面聲明函數,自己復制過來,名字需要與我們的格式相匹配
然后也是進行實現,實現的話也是在Widget.cpp文件
然后我們返回也是可以的
第三種信號與槽的綁定方式
第三個種方式是lambda的方式,那么這個一樣的方法,但是就是我們不需要進行槽函數的定義和實現了,因為我們是匿名函數嘛,但是要記住一下寫法,
第四種信號與槽的綁定方式
第四種方式用函數指針的寫法,我相信看語法,也會寫的出來,槽函數需要自己定義和實現
自定義信號與槽
這個就厲害了,最終形態了,可以自己定義信號與自定義槽
怎么搞
首先,信號與槽也是需要用QObject: :connect 進行連接,我們先講無參的,我們這邊根據寫出來的信號函數和槽函數,去widget.h去聲明
一定要記住自定義信號需要寫上signals:作為前綴,自定義槽函數需要public slots:這樣來寫,硬記都要記住,這個是沒有辦法的
然后我們同樣也是將這個slot槽函數進行實現,右鍵在widget.cpp中添加實現,還有我們的信號函數是不需要實現的
我們的這個信號與槽綁定之后,我們還需要進行激活信號,也就是發送信號,那么這邊有個關鍵詞是emit? ,我們的emit 作為信號的前綴就是觸發信號的作用,意思就是我們允許這個程序,后代碼執行到emit這一條代碼的時候就會觸發信號,那么槽函數就會被調用了
那么我們運行后就會看到返回的信息了,如果看不到怎么辦,而且代碼也沒問題怎么辦??那我們就重新構建一下項目,這樣就好了
那么這邊還會看到這個qDebug這個東東
在 Qt 開發中,qDebug()?是一個非常重要的調試工具,它的作用類似于 C++ 中的?std::cout,但專為 Qt 環境優化。所以我們以后都要用這個qDebug進行輸出數據,因為qDebug對調試Qt程序有很好的作用,后面可以用到了再詳細介紹
我們想要傳參數進去,怎么傳
那么這邊我們需要注意的點是這個信號與槽綁定的這個語句中不是填int value 了而是填int,這個要記住
舊語法(字符串) | SIGNAL(mySignal(int)) | - 只寫參數類型 |
新語法(函數指針) | &SenderClass::mySignal | - 寫完整函數簽名 |
當前的代碼使用的是舊語法,所以只需要填?int這個參數類型就好了