国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Qt學(xué)習(xí) 信號/槽

2019-11-08 20:07:50
字體:
供稿:網(wǎng)友

時間2017/02/15

主要學(xué)習(xí)了Qt Creator、Qt_VS兩種平臺下的信號/槽的基礎(chǔ)知識點(diǎn)

知識點(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)行速度有些慢。

實(shí)踐

一、Qt Creator

1、可視化實(shí)現(xià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ù)。

2、代碼實(shí)現(xiàn)

用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

3、混搭實(shí)現(xiàn)

可以新建界面的同時,新建若干變量和函數(shù),關(guān)鍵在于將兩者聯(lián)系起來。使用connect函數(shù),注意object1和object2的名稱,如果部件修改了名稱,記得也要更新object1或object2的名稱。此方法不推薦,容易混亂,相對建議在Qt_VS下使用。

二、QT_VS

此平臺和Qt Creator平臺方法有相似之處,但也有一些不同。同樣的,也有可視化實(shí)現(xiàn)和代碼實(shí)現(xiàn)兩種方式。

1、可視化實(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)方法。

3、混搭實(shí)現(xiàn)

可以新建界面的同時,新建若干變量和函數(shù),關(guān)鍵在于將兩者聯(lián)系起來,

參考鏈接:http://blog.csdn.net/a1054359972/article/details/50748642


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 奉化市| 太谷县| 犍为县| 衢州市| 启东市| 和林格尔县| 吉木乃县| 乳源| 土默特左旗| 万源市| 威海市| 漯河市| 博罗县| 寻乌县| 来安县| 高安市| 西和县| 桐梓县| 鲁山县| 威信县| 济宁市| 蕉岭县| 海城市| 黄冈市| 台南县| 宁明县| 东兰县| 宝兴县| 溆浦县| 揭阳市| 乐业县| 朝阳区| 广南县| 虞城县| 牡丹江市| 泊头市| 石阡县| 焉耆| 长春市| 衡阳县| 柯坪县|