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