簡述:QT5中關(guān)于信號與槽的基礎(chǔ)知識

1.信號和槽

什么叫做信號将鸵,顧名思義,就是某一個物體被干了什么佑颇,而發(fā)出的一種消息顶掉,比如說一個按鈕被鼠標(biāo)點(diǎn)擊了,那他就會發(fā)出一個點(diǎn)擊信號挑胸,告訴別人我被點(diǎn)擊了痒筒。而槽是指在接受到信號之后,具體要去做什么茬贵,比如一個標(biāo)簽在某一個按鈕被點(diǎn)擊之后簿透,接收到了點(diǎn)擊信號,他就會顯示一個笑臉等等闷沥。

信號和槽是QT中最基本的概念萎战,也是QT中最核心的概念。在QT中舆逃,當(dāng)一個信號被發(fā)送時蚂维,是按照類似廣播的方式發(fā)送的戳粒,每一個槽都能看到這個信號,但是只有你連接過的槽才回去接收這個信號并作出相應(yīng)的操作虫啥。打個比方蔚约,信號就是一個妹子,槽函數(shù)就是一個個漢子涂籽,當(dāng)信號被發(fā)送時苹祟,就是這個妹子對所有的漢子說她想找個男朋友,但是所有漢子不一定喜歡這個妹子评雌,所以只有對這個妹子感興趣的漢子才會回應(yīng)這個妹子的要求树枫。

信號和槽分為兩種,一種是類自帶的信號和槽景东,不用實(shí)現(xiàn)可以直接按照C++調(diào)用方法一樣使用砂轻。

我們查看QT中的幫助文檔,查詢你需要的類斤吐,比如我們查找QLabel這個類:

這里就是一個類中自帶的信號和槽函數(shù)
信號和槽

看到類中具體的實(shí)現(xiàn)的信號和槽函數(shù)名搔涝,我想大概就能理解這些信號和槽函數(shù)是用來實(shí)現(xiàn)什么功能的了。

信號和槽還有另一種形式和措,那就是自定義信號和槽庄呈,畢竟你無法要求QT幫你把你所有需要實(shí)現(xiàn)的操作全部封裝好了,這時候就需要自己去實(shí)現(xiàn)信號的發(fā)送和槽的實(shí)現(xiàn)派阱。

自定義信號和槽一般是寫在類構(gòu)造函數(shù)之中的一種QT獨(dú)有的語法诬留,大致和聲明類方法是一樣的:

這就是自定義的信號和槽函數(shù)

槽的具體實(shí)現(xiàn)很簡單,就是一個特別點(diǎn)的C++方法颁褂,QT中信號有點(diǎn)特殊故响,在C類語言中傀广,每一個定義了的函數(shù)都必須實(shí)現(xiàn)颁独,不能只簡簡單單的聲明,但是QT中的信號不需要具體實(shí)現(xiàn)伪冰,這是QT中預(yù)處理器Moc實(shí)現(xiàn)的事情誓酒,我們暫時不需要了解,我們只需要知道贮聂,聲明了的槽函數(shù)就必須要實(shí)現(xiàn)靠柑,而信號不需要。

具體的實(shí)例我會在下面的實(shí)例應(yīng)用中具體介紹吓懈。

2.連接格式

還記得前面說的那個妹子和漢子之間的不可告人的故事嗎歼冰?是的,那么要怎么做漢子才能和這個妹子發(fā)生點(diǎn)關(guān)系(不要想歪了)耻警,就是說要如何聲明隔嫡,這個槽函數(shù)才能對特定的信號產(chǎn)生反應(yīng)甸怕。

在QT中,這是一個連接函數(shù)腮恩,他的格式如下:

QObject::connect(發(fā)送者梢杭,信號,接受者秸滴,槽)武契;

這個連接函數(shù)具有4個參數(shù)(當(dāng)然也可以只有3個,接收者可以不需要荡含,但是一般不怎么寫咒唆,了解即可),第一個參數(shù)是發(fā)送者释液,顧名思義钧排,就是誰發(fā)送了這個信號,比如PushButton被點(diǎn)擊了均澳,發(fā)送一個Cliked的信號恨溜,那PushButton就是發(fā)送者,Cliked就是信號找前。同理糟袁,第三個參數(shù)就是誰接收了這個信號。

下面給出一個實(shí)例:

實(shí)例

在QT4中躺盛,信號和槽函數(shù)參數(shù)是兩個不同的宏项戴,但是在QT5中,具體寫法如上槽惫。

3.實(shí)例應(yīng)用

在了解了信號和槽的基礎(chǔ)知識之后周叮,我想應(yīng)該很容易就能實(shí)現(xiàn)一些簡單的操作。

接下來我會用一個很簡單的實(shí)例來使用信號和槽界斜。

程序很簡單仿耽,就是按住按鈕,標(biāo)簽上的文本改成“Hello QT!”,然后松開按鈕各薇,標(biāo)簽上的文本改成“Goodbye!”??? 具體實(shí)現(xiàn)如下:

定義槽函數(shù)
實(shí)現(xiàn)槽函數(shù)项贺,連接
效果1
效果2
效果3

看到這里是不是對槽函數(shù)有了具體的認(rèn)識?關(guān)于如何發(fā)送信號就以后遇到的時候再講把峭判,相信看到這里已經(jīng)可以簡單的應(yīng)用信號和槽了开缎。

4.常見錯誤(本人)

在QT中,關(guān)于信號和槽林螃,本人經(jīng)常不小心遇到一些問題奕删,就簡單介紹一下:

(1)在對象還不存在的時候絕對不能用他來做信號與槽的連接!A迫稀M瓴小F鲋汀!;倒帧1慈蟆!铝宵!舉個例子:

QObject::connect(ui->pushButton,&QPushButton::cliked,ui->label,&QLabel::clear);

如果我的pushButton這個對象現(xiàn)在還沒有存在的時候打掘,千萬不能在主窗口的構(gòu)造函數(shù)中去做這個連接,不然你會發(fā)現(xiàn)你的程序就GG了鹏秋,所以防止這個錯誤最好的辦法就是尊蚁,什么時候要使用這個連接就什么時候去寫他,不要一股腦的在主窗口的構(gòu)造函數(shù)中去做完全部的連接侣夷。

(2)參數(shù)對應(yīng):崤蟆!0偻亍琴锭!

由于QT信號和槽函數(shù)的翻譯是由一個叫做Moc的預(yù)處理器(前面提到過)來完成的,所以關(guān)于信號和槽參數(shù)的匹配就很重要衙传,信號中出現(xiàn)的參數(shù)决帖,槽函數(shù)中必須要有,即使是你不需要使用這個參數(shù)蓖捶,但是你還是需要寫進(jìn)去地回,不然Moc就無法比配信號與槽,也就無法連接了俊鱼。具體例子沒有刻像,但是我相信以后你一旦使用到含有參數(shù)的信號一定會遇到這個問題,所以在使用類自帶的參數(shù)的時候最好先看清楚這個信號帶上信號并闲。

???????????????????????????????????????????????????????????????????????????????????????????????????????? ? ?? By? ASA

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末细睡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子焙蚓,更是在濱河造成了極大的恐慌纹冤,老刑警劉巖洒宝,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件购公,死亡現(xiàn)場離奇詭異,居然都是意外死亡雁歌,警方通過查閱死者的電腦和手機(jī)宏浩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靠瞎,“玉大人比庄,你說我怎么就攤上這事求妹。” “怎么了佳窑?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵制恍,是天一觀的道長。 經(jīng)常有香客問我神凑,道長净神,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任溉委,我火速辦了婚禮鹃唯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓣喊。我一直安慰自己坡慌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布藻三。 她就那樣靜靜地躺著洪橘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棵帽。 梳的紋絲不亂的頭發(fā)上梨树,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音岖寞,去河邊找鬼抡四。 笑死,一個胖子當(dāng)著我的面吹牛仗谆,可吹牛的內(nèi)容都是我干的指巡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼隶垮,長吁一口氣:“原來是場噩夢啊……” “哼藻雪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狸吞,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勉耀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蹋偏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體便斥,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年威始,在試婚紗的時候發(fā)現(xiàn)自己被綠了枢纠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡黎棠,死狀恐怖晋渺,靈堂內(nèi)的尸體忽然破棺而出镰绎,到底是詐尸還是另有隱情,我是刑警寧澤木西,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布畴栖,位于F島的核電站,受9級特大地震影響八千,放射性物質(zhì)發(fā)生泄漏驶臊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一叼丑、第九天 我趴在偏房一處隱蔽的房頂上張望关翎。 院中可真熱鬧,春花似錦鸠信、人聲如沸纵寝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爽茴。三九已至,卻和暖如春绰垂,著一層夾襖步出監(jiān)牢的瞬間室奏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工劲装, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胧沫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓占业,卻偏偏與公主長得像绒怨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谦疾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 信號和槽(Signals and Slots) Qt庫第一個認(rèn)識到在幾乎所有情況下南蹂,程序員不需要或甚至不想知道所有...
    珞珈村下山閱讀 9,836評論 0 23
  • 韓元旭、余橙念恍、沈開洋 Qt介紹 Qt是一個跨平臺的C++圖形用戶界面應(yīng)用程序框架六剥。它早在1991年奇趣科技公司兩位...
    開洋_shen閱讀 16,191評論 4 24
  • 轉(zhuǎn)自:作者簡介作者:唐新華 (xhsmart@263.net)軟件工程師 ?? 信號和槽作為QT的核心機(jī)制在QT編...
    njukay閱讀 1,340評論 0 49
  • 為什么在頭文件中有的是使用前置聲明,而有的是包含頭文件峰伙? 如下代碼: 前置聲明(forward declarati...
    Joe_HUST閱讀 1,286評論 0 6
  • 總有一種情懷難以割舍词爬,總有一種風(fēng)韻直低于心秃嗜。許是喜歡唯美精致而意味悠長的事物,故而才會對古香古色的中國風(fēng)物一見傾心...
    黔中吟閱讀 207評論 0 0