每一個圖形開發語言、工具都有自己的一套的ui交互機制,Qt也不例外,Qt有自己獨特的信號與槽機制用於ui與功能算法的交互。
① Qt的信號與槽機制包含以下三點:
1.確定是哪個控件發出了信號(Who)
2.確定發出了什麼信號(What)
3.確定這個信號應該調用什麼功能函數(這個函數在Qt中叫做“槽函數”,實際上和類中普通成員函數是一樣的,唯一的不同就是它和控件綁定了)
② 槽函數的三種:
1.通過函數:connect(對象1,對象1的函數,對象2,對象2的函數)來實現
其中,第一個參數:對象1是信號的發出者(一般是一個控件的實例對象),第二個參數:對象1的函數(一般是控件所能發出的信號,如CLICK()........),第三個參數:對象2是信號的接受者(一般是一個界面的實例對象),第四個參數:對象2的函數(一般是類中事先定義好的功能函數,此時這個函數即爲槽函數)。
2. 通過右擊控件,選擇”轉化槽“
然後選擇相應的信號函數
然後會自動跳到一個界面,此時一個槽函數的聲明和實現都已經幫你生成了,其中函數名包含控件id名稱(btn_cancel)和相應的信號名稱(clicked)。
相信有人會問,在第一個方法中有四個參數, 到這才只有三個(控件,信號,槽函數)呀?額。。少了的第三個參數其實默認爲控件所在的這個窗口(它也是一個實例對象呀)。
3.(不常用)通過在ui界面中設置:
如圖所示,在QT Designer窗口中的中間下面有個窗口,選中Singals&Slots Editor標籤
點擊”+“號,就可以像類似於connect函數一樣添加槽函數啦~~
不過這個方法有一個侷限性,就是隻能添加系統中的槽函數,不能添加自定義的槽函數,這個。。。。就很尷尬了。。所以一般使用第一種和第二種方法。。
總結,一般添加槽函數是採用第一種和第二種方法,這兩種方法各有利弊:
① 第一種方法比較繁瑣,不過勝在直觀清晰(代碼可讀性很高),所有connect函數都寫在ui函數中,都集中在一塊,哪個控件,發出什麼信號,哪個窗口接受,做出什麼功能。一目瞭然!(一般connect函數都寫在ui-setUi(this);下面)
② 第二種方法,很方便 (我比較喜歡),但是要看哪個控件發出什麼信號,用什麼功能函數做出反應,都得一個一個去找函數。。其實還好啦。。可以去頭文件去找函數聲明呀,然後ctrl+F,在代碼中查找唄。。嘻嘻嘻
看的視頻教程中,視頻中老師一直說Qt的信號與槽機制是他見過的UI交互設計中最簡單方便。。。我接觸的UI交互設計比較少。。以前也簡單接觸過AS,用java寫過安卓小應用,印象中AS的交互設計也挺方便的。。。不過Qt也很優秀的呀!!!嘿嘿嘿