您好,登錄后才能下訂單哦!
信號與槽函數是我們學習QT必備的基礎知識,今天跟大家分享我學習QT的一些總結吧。
信號槽機制是Qt編程的基礎。通過信號槽,能夠使Qt各組件在不知道對方的情形下能夠相互通訊。
槽函數和普通的C++成員函數沒有很大的區別。它們也可以使virtual的;可以被重寫;可以使public、protected或者private的;可以由其它的C++函數調用;參數可以是任何類型的。如果要說區別,那就是,槽函數可以和一個信號相連接,當這個信號發生時,它可以被自動調用。
信號與槽函數的連接我們可以用connect函數:
connect(sender,SIGNAL(signal()),receive,SLOT(slot()));
需要注意的幾點問題:
1、一個信號可以和多個槽相連(槽函數被調用的順序是隨機的)
connect(sender,SIGNAL(signal()),this,SLOT(slot_1()));connect(sender,SIGNAL(signal()),this,SLOT(slot_2()));
2、多個信號可以連接同一個槽函數
connect(sender,SIGNAL(signal_1()),this,SLOT(slot()));connect(sender,SIGNAL(signal_2()),this,SLOT(slot()));
3、一個信號可以連接另外一個信號
connect(sender,SIGNAL(signal_1()),this,SIGNAL(signal_2()));
4、信號與槽函數之間的連接可以被取消
disconnect(sender,SIGNAL(signal()),this,SLOT(slot()));
5、信號與槽函數的參數個數、類型以及出現順序必須一致,另外,當信號的參數個數多于槽函數時,信號多出的參數將會被忽略掉
connect(sender,SIGNAL(signal(int,const Qstring &)),this,SLOT(slot(int b,const Qstring &)));connect(sender,SIGNAL(signal(int,const Qstring &)),this,SLOT(slot(int)));//此時const Qstring &將會被忽略
6、宏定義不能用在signal和slot的參數中
7、函數指針不能作為信號與槽函數的參數,同時信號與槽函數也不能有缺省參數
8、友元聲明不能位于信號或槽函數聲明區內
9、信號與槽不能攜帶模板類參數
10、嵌套的類不能位于信號與槽函數區域內,也不能有信號或者槽函數
在使用信號與槽機制的時候,要注意避免陷入死循環,即在槽函數中再次發送所接收到的信號。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。