時間2017/02/15
主要學(xué)習(xí)了Qt Creator、Qt_VS兩種平臺下的信號/槽的基礎(chǔ)知識點(diǎn)
信號和槽機(jī)制(Signal%Slot)
Qt提供了信號和槽機(jī)制用于完成界面操作的響應(yīng),是完成任意兩個Qt對象之間的通信機(jī)制。其中,信號會在某個特定情況或動作下被觸發(fā),槽是等同于接收并處理信號的函數(shù)。
信號與槽機(jī)制的連接方式
1、一個信號與一個槽相連
connect(Object1,SIGNAL(signal),Object2,SLOT(slot));
其中,signal為對象Objetc1的信號;slot為對象Object2的槽。
比如定義一個button的信號/槽機(jī)制:connect(button_name,SIGNAL(clicked()),this,SLOT(functions_name(arguments)));
也可寫成:connect(button_name,“clicked()”,this,“functions_name(arguments)”);
2、一個信號與另一個信號相連
connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal2));
表示Object1的信號1發(fā)射可以觸發(fā)Object2的信號2發(fā)射。
3、同一個信號與多個槽相連
connect(Objector1,SIGNAL(signal1),Objector2,SLOT(slot1));
connect(Objector1,SIGNAL(signal1),Objector3,SLOT(slot2));
4、同一個槽可以響應(yīng)多個信號
connect(Objector1,SIGNAL(signal1),Objector2,SLOT(slot1));
connect(Objector2,SIGNAL(signal1),Objector2,SLOT(slot1));
信號與槽機(jī)制的優(yōu)點(diǎn)
(1)類型安全
信號的參數(shù)類型和參數(shù)個數(shù)同接收該信號的槽的參數(shù)類型和參數(shù)個數(shù)相同。不過,一個槽的參數(shù)個數(shù)可以少于信號的參數(shù)個數(shù),但缺少的參數(shù)必須是信號參數(shù)的最后一個或幾個參數(shù)。
(2)松散耦合
信號和槽機(jī)制減弱了Qt對象的耦合度。激發(fā)信號的Qt對象無須知道是哪個對象的那個槽需要接收它發(fā)出的信號,只需要做的是在適當(dāng)?shù)臅r間發(fā)送適當(dāng)?shù)男盘柧涂梢粤耍恍枰酪膊恍枰P(guān)心它的信號有沒有被接收到。
注:一個類若要支持信號和槽,就必須從QObject或QObject的子類繼承,Qt信號和槽機(jī)制不支持對模板的使用。
信號與槽機(jī)制的效率
信號和槽機(jī)制增強(qiáng)了對象間的通信的靈活性,然后也損失了一些性能。同回調(diào)函數(shù)相比,信號與槽機(jī)制運(yùn)行速度有些慢。
用Qt Creator創(chuàng)建一個帶UI界面的項(xiàng)目,在界面上拖拽/新建一個button。
方法一:右鍵點(diǎn)擊button,再點(diǎn)擊"轉(zhuǎn)到槽"。
這樣其實(shí)就已經(jīng)建立信號/槽機(jī)制,只不過是系統(tǒng)化生成的,沒有代碼的影子。
這里的信號是clicked(),即點(diǎn)擊button這個事件;槽是剛新建的函數(shù),比如on_pushButton_clicked()函數(shù)。在該函數(shù)內(nèi)填寫處理函數(shù)代碼,即實(shí)現(xiàn)了一個帶功能的按鈕。
方法二:按下F4按鍵,編輯信號/槽。
點(diǎn)擊button,即作為信號;再拖拽到某空白區(qū)域,即為槽。
再進(jìn)入配置連接,建立信號/槽聯(lián)系。下圖,左邊為信號,相當(dāng)于觸發(fā)事件;右邊為槽,相當(dāng)于相應(yīng)事件。
注意,信號/槽既可以使用系統(tǒng)自帶的函數(shù),也可以使用自定義函數(shù)。比如,button的信號為clicked(),槽為自定義函數(shù)。
用Qt Creator新建一個不帶UI界面的項(xiàng)目,即一些小部件,如button,label用代碼調(diào)用來創(chuàng)建。步驟相對于“可視化操作”顯得復(fù)雜一點(diǎn),但可操作性很強(qiáng),還可以鍛煉編寫代碼的能力。
簡單來說,就是在x.h和x.cpp中新建一些變量、函數(shù),記得添加相關(guān)的頭文件。比如#include<QpushButton>
具體內(nèi)容,可參見該教程:Qt入門之信號與槽機(jī)制:http://www.cnblogs.com/MuyouSome/p/3515941.html
此平臺和Qt Creator平臺方法有相似之處,但也有一些不同。同樣的,也有可視化實(shí)現(xiàn)和代碼實(shí)現(xiàn)兩種方式。
打開VS,創(chuàng)建Qt帶UI界面的項(xiàng)目。雙擊x.ui,會自動啟動Qt Designer打開其UI界面。
剩余操作與Qt Creator的方法二相同,即按下F4進(jìn)行配置。注意:Qt Creator的方法一在這里不適用,即沒有“轉(zhuǎn)到槽”功能。
2、代碼實(shí)現(xiàn)
打開VS,創(chuàng)建Qt不帶UI界面的項(xiàng)目。
剩余操作,參見Qt Creator的相關(guān)方法。
可以新建界面的同時,新建若干變量和函數(shù),關(guān)鍵在于將兩者聯(lián)系起來,
參考鏈接:http://blog.csdn.net/a1054359972/article/details/50748642
新聞熱點(diǎn)
疑難解答