在《Qt信號(hào)和槽函數(shù)機(jī)制,此篇足矣》一文中已經(jīng)描述了Qt的信號(hào)和槽函數(shù)機(jī)制,在實(shí)際項(xiàng)目開發(fā)中,一般會(huì)使用QObject下提供的接口函數(shù)創(chuàng)建信號(hào)和槽函數(shù)之間的關(guān)聯(lián):
?
但是在Qt Designer中提供了一個(gè)快速關(guān)聯(lián)信號(hào)和槽函數(shù)的方式:使用『轉(zhuǎn)到槽...』對(duì)話框創(chuàng)建選定控件之間的信號(hào)和槽函數(shù)關(guān)聯(lián)。
在點(diǎn)擊『轉(zhuǎn)到槽...』選項(xiàng)后,會(huì)彈出一個(gè)編輯框,例如此處以QPushButton按鈕控件為例,則會(huì)彈出如下的對(duì)話框:
從上圖可知,首先QObject和QWidget下的信號(hào)是公共的,QAbstractButton是按鈕類獨(dú)有的,Qt使用該類抽象出了按鈕的一些公共操作,并已定義好具體的信號(hào)。當(dāng)選中具體信號(hào)后,點(diǎn)擊“確定”按鈕,QtCreator會(huì)自動(dòng)生成一個(gè)槽函數(shù),例如,如果選擇了clicked()這個(gè)信號(hào),則會(huì)在代碼中生成如下代碼,在頭文件生成代碼如下:
privateslots: voidon_pushButton_clicked();
在源文件中生成代碼如下:
本質(zhì)上,QtCreator生成代碼的成員函數(shù)的命名是能夠被QMetaObject的自動(dòng)連接工具識(shí)別的,在構(gòu)建過程中,在uic生成的用于描述界面的C++文件中,會(huì)出現(xiàn)以下代碼:
因此,通過connectSlotByName()就將名稱和槽函數(shù)進(jìn)行了關(guān)聯(lián),該函數(shù)會(huì)遞歸搜索給定對(duì)象的所有子對(duì)象,并將它們的匹配信號(hào)連接到遵循特定格式命名的槽函數(shù),格式如下:
voidon_
在實(shí)際使用過程中,只需要聲明和實(shí)現(xiàn)一個(gè)槽函數(shù),其名稱遵循標(biāo)準(zhǔn)約定,就可以將一個(gè)控件對(duì)象的信號(hào)和具體槽函數(shù)關(guān)聯(lián),當(dāng)然這個(gè)過程由QtCreator自動(dòng)完成。
Qt提供的信號(hào)和槽函數(shù)的自動(dòng)連接機(jī)制,為開發(fā)小部件提供了標(biāo)準(zhǔn)命名約定和顯式接口。通過提供實(shí)現(xiàn)給定界面的源代碼,在設(shè)計(jì)用戶界面時(shí)無需再編寫代碼就可以檢查設(shè)計(jì)是否真正有效了。
小生總結(jié)
基于QtCreator,提供的信號(hào)和槽函數(shù)的自動(dòng)連接機(jī)制在實(shí)際開發(fā)中,經(jīng)常會(huì)被使用到,特別是在需要快速驗(yàn)證功能和需求的時(shí)候,這種方式比使用connect()關(guān)聯(lián)信號(hào)和槽函數(shù)的開發(fā)效率要快很多。但是,如果界面中同類型控件較多的情況下,就需要注釋清楚,不然不好區(qū)分具體控件下的功能。
在實(shí)際項(xiàng)目開發(fā)中,對(duì)于自定義的信號(hào),習(xí)慣使用connect()進(jìn)行槽函數(shù)的關(guān)聯(lián)。對(duì)于具體界面中控件,如果是Qt提供的標(biāo)準(zhǔn)控件,則可以使用信號(hào)和槽函數(shù)的自動(dòng)連接機(jī)制,以加快開發(fā)效率。
審核編輯:湯梓紅
-
信號(hào)
+關(guān)注
關(guān)注
11文章
2767瀏覽量
76466 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4262瀏覽量
62241 -
Designer
+關(guān)注
關(guān)注
0文章
119瀏覽量
35669 -
代碼
+關(guān)注
關(guān)注
30文章
4700瀏覽量
68107 -
Qt
+關(guān)注
關(guān)注
1文章
300瀏覽量
37738
原文標(biāo)題:Qt “懶人寫法”之一鍵破“槽”
文章出處:【微信號(hào):嵌入式小生,微信公眾號(hào):嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論