資料介紹
12.2 Qt/Embedded開發(fā)入門
12.2.1 Qt/Embedded介紹
1.架構(gòu)
Qt/Embedded以原始Qt為基礎(chǔ),并做了許多出色的調(diào)整以適用于嵌入式環(huán)境。Qt/Embedded通過Qt API與Linux I/O設(shè)施直接交互,成為嵌入式Linux端口。同Qt/X11相比,Qt/Embedded很省內(nèi)存,因?yàn)樗恍枰粋€(gè)X服務(wù)器或是Xlib庫,它在底層拋棄了X lib,采用framebuffer(幀緩沖)作為底層圖形接口。同時(shí),將外部輸入設(shè)備抽象為keyboard和mouse輸入事件。Qt/Embedde的應(yīng)用程序可以直接寫內(nèi)核緩沖幀,這避免開發(fā)者使用繁瑣的Xlib/Server系統(tǒng)。圖12.1所示比較了Qt/Embedded與Qt/X11的架構(gòu)區(qū)別。

使用單一的API進(jìn)行跨平臺的編程可以有很多好處。提供嵌入式設(shè)備和桌面計(jì)算機(jī)環(huán)境下應(yīng)用的公司可以培訓(xùn)開發(fā)人員使用同一套工具開發(fā)包,這有利于開發(fā)人員之間共享開發(fā)經(jīng)驗(yàn)與知識,也使得管理人員在分配開發(fā)人員到項(xiàng)目中的時(shí)候增加靈活性。更進(jìn)一步來說,針對某個(gè)平臺而開發(fā)的應(yīng)用和組件也可以銷售到Qt支持的其他平臺上,從而以低廉的成本擴(kuò)大產(chǎn)品的市場。
(1)窗口系統(tǒng)。
一個(gè)Qt/Embedded窗口系統(tǒng)包含了一個(gè)或多個(gè)進(jìn)程,其中的一個(gè)進(jìn)程可作為服務(wù)器。該服務(wù)進(jìn)程會分配客戶顯示區(qū)域,以及產(chǎn)生鼠標(biāo)和鍵盤事件。該服務(wù)進(jìn)程還能夠提供輸入方法和一個(gè)用戶接口給運(yùn)行起來的客戶應(yīng)用程序。該服務(wù)進(jìn)程其實(shí)就是一個(gè)有某些額外權(quán)限的客戶進(jìn)程。任何程序都可以在命令行上加上“-qws”的選項(xiàng)來把它作為一個(gè)服務(wù)器運(yùn)行。
客戶與服務(wù)器之間的通信使用共享內(nèi)存的方法實(shí)現(xiàn),通信量應(yīng)該保持最小,例如客戶進(jìn)程直接訪問幀緩沖來完成全部的繪制操作,而不會通過服務(wù)器,客戶程序需要負(fù)責(zé)繪制它們自己的標(biāo)題欄和其他式樣。這就是Qt/Embedded庫內(nèi)部層次分明的處理過程。客戶可以使用QCOP通道交換消息。服務(wù)進(jìn)程簡單的廣播QCOP消息給所有監(jiān)聽指定通道的應(yīng)用進(jìn)程,接著應(yīng)用進(jìn)程可以把一個(gè)插槽連接到一個(gè)負(fù)責(zé)接收的信號上,從而對消息做出響應(yīng)。消息的傳遞通常伴隨著二進(jìn)制數(shù)據(jù)的傳輸,這是通過一個(gè)QDataStream類的序列化過程來實(shí)現(xiàn)的,有關(guān)這個(gè)類的描述,請讀者參考相關(guān)資料。
QProcess類提供了另外一種異步的進(jìn)程間通信機(jī)制。它用于啟動(dòng)一個(gè)外部的程序并且通過寫一個(gè)標(biāo)準(zhǔn)的輸入和讀取外部程序的標(biāo)準(zhǔn)輸出和錯(cuò)誤碼來和它們通信。
(2)字體
Qt/Embedded支持4種不同的字體格式:True Type字體(TTF),Postscript Type1字體,位圖發(fā)布字體(BDF)和Qt的預(yù)呈現(xiàn)(Pre-rendered)字體(QPF)。Qt還可以通過增加Qfont-
Factory的子類來支持其他字體,也可以支持以插件方式出現(xiàn)的反別名字體。
每個(gè)TTF或者TYPE1類型的字體首次在圖形或者文本方式的環(huán)境下被使用時(shí),這些字體的字形都會以指定的大小被預(yù)先呈現(xiàn)出來,呈現(xiàn)的結(jié)果會被緩沖。根據(jù)給定的字體尺寸(例如10或12點(diǎn)陣)預(yù)先呈現(xiàn)TTF或者TYPE1類型的字體文件并把結(jié)果以QPF的格式保存起來,這樣可以節(jié)省內(nèi)存和CPU的處理時(shí)間。QPF文件包含了一些必要的字體,這些字體可以通過makeqpf工具取得,或者通過運(yùn)行程序時(shí)加上“-savefonts”選項(xiàng)獲取。如果應(yīng)用程序中使用到的字體都是QPF格式,那么Qt/Embedded將被重新配置,并排除對TTF和TYPE1類型的字體的編譯,這樣就可以減少Q(mào)t/Embedded的庫的大小和存儲字體的空間。例如一個(gè)10點(diǎn)陣大小的包含所有ASCII字符的QPF字體文件的大小為1300字節(jié),這個(gè)文件可以直接從物理存儲格式映射成為內(nèi)存存儲格式。
Qt/Embedded的字體通常包括Unicode字體的一部分子集,ASCII和Latin-1。一個(gè)完整的16點(diǎn)陣的Unicode字體的存儲空間通常超過1MB,我們應(yīng)盡可能存儲一個(gè)字體的子集,而不是存儲所有的字,例如在一個(gè)應(yīng)用中,僅僅需要以Cappuccino字體、粗體的方式顯示產(chǎn)品的名稱,但是卻有一個(gè)包含了全部字形的字體文件。
(3)輸入設(shè)備及輸入法。
Qt/Embedded 3.0支持幾種鼠標(biāo)協(xié)議:BusMouse、IntelliMouse,Microsoft和MouseMan.Qt/
Embedded還支持NECVr41XX和iPAQ的觸摸屏。通過從QWSMouseHandler或者Qcalibra-
tedMouseHandler派生子類,開發(fā)人員可以讓Qt/Embedded支持更多的客戶指示設(shè)備。
Qt/Embedded支持標(biāo)準(zhǔn)的101鍵盤和Vr41XX按鍵,通過子類化QWSKeyboardHandler可以讓Qt/Embedded支持更多的客戶鍵盤和其他的非指示設(shè)備。
對于非拉丁語系字符(例如阿拉伯、中文、希伯來和日語)的輸入法,需要把它寫成過濾器的方式,并改變鍵盤的輸入。輸入法的作者應(yīng)該對全部的Qt API的使用有完整的認(rèn)識。在一個(gè)無鍵盤的設(shè)備上,輸入法成了惟一的輸入字符的手段。Qtopia提供了4種輸入方法:筆跡識別器、圖形化的標(biāo)準(zhǔn)鍵盤、Unicode鍵盤和基于字典方式提取的鍵盤。
(4)屏幕加速
通過子類化QScreen和QgfxRaster可以實(shí)現(xiàn)硬件加速,從而為屏幕操作帶來好處。Troll-
tech提供了Mach64和Voodoo3視頻卡的硬件加速的驅(qū)動(dòng)例子,同時(shí)可以按照協(xié)議編寫其他的驅(qū)動(dòng)程序。
2.Qt的開發(fā)環(huán)境
Qt/Embedded的開發(fā)環(huán)境可以取代那些我們熟知的UNIX和Windows開發(fā)工具。它提供了幾個(gè)跨平臺的工具使得開發(fā)變得迅速和方便,尤其是它的圖形設(shè)計(jì)器。UNIX下的開發(fā)者可以在PC機(jī)或者工作站使用虛擬緩沖幀,從而可以模仿一個(gè)和嵌入式設(shè)備的顯示終端大小,像素相同的顯示環(huán)境。
嵌入式設(shè)備的應(yīng)用可以在安裝了一個(gè)跨平臺開發(fā)工具鏈的不同的平臺上編譯。最通常的做法是在一個(gè)UNIX系統(tǒng)上安裝跨平臺的帶有l(wèi)ibc庫的GNU C++編譯器和二進(jìn)制工具。在開發(fā)的許多階段,一個(gè)可替代的做法是使用Qt的桌面版本,例如通過Qt/X11或是Qt/Windows來進(jìn)行開發(fā)。這樣開發(fā)人員就可以使用他們熟悉的開發(fā)環(huán)境,例如微軟公司的Visual C++或者Borland C++。在UNIX操作系統(tǒng)下,許多環(huán)境也是可用的,例如Kdevelop,它也支持交互式開發(fā)。
如果Qt/Embedded的應(yīng)用是在UNIX平臺下開發(fā)的話,那么它就可以在開發(fā)的機(jī)器上以一個(gè)獨(dú)立的控制臺或者虛擬緩沖幀的方式來運(yùn)行,對于后者來說,其實(shí)是有一個(gè)X11的應(yīng)用程序虛擬了一個(gè)緩沖幀。通過指定顯示設(shè)備的寬度、高度和顏色深度,虛擬出來的緩沖幀將和物理的顯示設(shè)備在每個(gè)像素上保持一致。這樣每次調(diào)試應(yīng)用時(shí)開發(fā)人員就不用總是刷新嵌入式設(shè)備的Flash存儲空間,從而加速了應(yīng)用的編譯、鏈接和運(yùn)行周期。運(yùn)行Qt的虛擬緩沖幀工具的方法是在Linux的圖形模式下運(yùn)行以下命令:
qvfb (回車)
當(dāng)Qt嵌入式的應(yīng)用程序要把顯示結(jié)果輸出到虛擬緩沖幀時(shí),我們在命令行運(yùn)行這個(gè)程序,并在程序名后加上-qws的選項(xiàng)。例如:$》 hello–qws。
3.Qt的支撐工具
Qt包含了許多支持嵌入式系統(tǒng)開發(fā)的工具,有兩個(gè)最實(shí)用的工具是qmake和Qt designer(圖形設(shè)計(jì)器)。
n qmake是一個(gè)為編譯Qt/Embedded庫和應(yīng)用而提供的Makefile生成器。它能夠根據(jù)一個(gè)工程文件(.pro)產(chǎn)生不同平臺下的Makefile文件。qmake支持跨平臺開發(fā)和影子生成,影子生成是指當(dāng)工程的源代碼共享給網(wǎng)絡(luò)上的多臺機(jī)器時(shí),每臺機(jī)器編譯鏈接這個(gè)工程的代碼將在不同的子路徑下完成,這樣就不會覆蓋別人的編譯鏈接生成的文件。qmake還易于在不同的配置之間切換。
n Qt圖形設(shè)計(jì)器可以使開發(fā)者可視化地設(shè)計(jì)對話框而不需編寫代碼。使用Qt圖形設(shè)計(jì)器的布局管理可以生成能平滑改變尺寸的對話框。
qmake和Qt圖形設(shè)計(jì)器是完全集成在一起的。
12.2.2 Qt/Embedded信號和插槽機(jī)制
1.機(jī)制概述
信號和插槽機(jī)制是Qt的核心機(jī)制,要精通Qt編程就必須對信號和插槽有所了解。信號和插槽是一種高級接口,應(yīng)用于對象之間的通信,它是Qt的核心特性,也是Qt區(qū)別于其他工具包的重要地方。信號和插槽是Qt自行定義的一種通信機(jī)制,它獨(dú)立于標(biāo)準(zhǔn)的C/C++語言,因此要正確地處理信號和插槽,必須借助一個(gè)稱為moc(Meta Object Compiler)的Qt工具,該工具是一個(gè)C++預(yù)處理程序,它為高層次的事件處理自動(dòng)生成所需要的附加代碼。
所謂圖形用戶接口的應(yīng)用就是要對用戶的動(dòng)作做出響應(yīng)。例如,當(dāng)用戶單擊了一個(gè)菜單項(xiàng)或是工具欄的按鈕時(shí),應(yīng)用程序會執(zhí)行某些代碼。大部分情況下,是希望不同類型的對象之間能夠進(jìn)行通信。程序員必須把事件和相關(guān)代碼聯(lián)系起來,這樣才能對事件做出響應(yīng)。以前的工具開發(fā)包使用的事件響應(yīng)機(jī)制是易崩潰的,不夠健壯的,同時(shí)也不是面向?qū)ο蟮摹?br /> 以前,當(dāng)使用回調(diào)函數(shù)機(jī)制把某段響應(yīng)代碼和一個(gè)按鈕的動(dòng)作相關(guān)聯(lián)時(shí),通常把那段響應(yīng)代碼寫成一個(gè)函數(shù),然后把這個(gè)函數(shù)的地址指針傳給按鈕,當(dāng)那個(gè)按鈕被單擊時(shí),這個(gè)函數(shù)就會被執(zhí)行。對于這種方式,以前的開發(fā)包不能夠確保回調(diào)函數(shù)被執(zhí)行時(shí)所傳遞進(jìn)來的函數(shù)參數(shù)就是正確的類型,因此容易造成進(jìn)程崩潰。另外一個(gè)問題是,回調(diào)這種方式緊緊地綁定了圖形用戶接口的功能元素,因而很難進(jìn)行獨(dú)立的開發(fā)。
信號與插槽機(jī)制是不同的。它是一種強(qiáng)有力的對象間通信機(jī)制,完全可以取代原始的回調(diào)和消息映射機(jī)制。在Qt中信號和插槽取代了上述這些凌亂的函數(shù)指針,使得用戶編寫這些通信程序更為簡潔明了。信號和插槽能攜帶任意數(shù)量和任意類型的參數(shù),它們是類型完全安全的,因此不會像回調(diào)函數(shù)那樣產(chǎn)生core dumps。
12.2.1 Qt/Embedded介紹
1.架構(gòu)
Qt/Embedded以原始Qt為基礎(chǔ),并做了許多出色的調(diào)整以適用于嵌入式環(huán)境。Qt/Embedded通過Qt API與Linux I/O設(shè)施直接交互,成為嵌入式Linux端口。同Qt/X11相比,Qt/Embedded很省內(nèi)存,因?yàn)樗恍枰粋€(gè)X服務(wù)器或是Xlib庫,它在底層拋棄了X lib,采用framebuffer(幀緩沖)作為底層圖形接口。同時(shí),將外部輸入設(shè)備抽象為keyboard和mouse輸入事件。Qt/Embedde的應(yīng)用程序可以直接寫內(nèi)核緩沖幀,這避免開發(fā)者使用繁瑣的Xlib/Server系統(tǒng)。圖12.1所示比較了Qt/Embedded與Qt/X11的架構(gòu)區(qū)別。

使用單一的API進(jìn)行跨平臺的編程可以有很多好處。提供嵌入式設(shè)備和桌面計(jì)算機(jī)環(huán)境下應(yīng)用的公司可以培訓(xùn)開發(fā)人員使用同一套工具開發(fā)包,這有利于開發(fā)人員之間共享開發(fā)經(jīng)驗(yàn)與知識,也使得管理人員在分配開發(fā)人員到項(xiàng)目中的時(shí)候增加靈活性。更進(jìn)一步來說,針對某個(gè)平臺而開發(fā)的應(yīng)用和組件也可以銷售到Qt支持的其他平臺上,從而以低廉的成本擴(kuò)大產(chǎn)品的市場。
(1)窗口系統(tǒng)。
一個(gè)Qt/Embedded窗口系統(tǒng)包含了一個(gè)或多個(gè)進(jìn)程,其中的一個(gè)進(jìn)程可作為服務(wù)器。該服務(wù)進(jìn)程會分配客戶顯示區(qū)域,以及產(chǎn)生鼠標(biāo)和鍵盤事件。該服務(wù)進(jìn)程還能夠提供輸入方法和一個(gè)用戶接口給運(yùn)行起來的客戶應(yīng)用程序。該服務(wù)進(jìn)程其實(shí)就是一個(gè)有某些額外權(quán)限的客戶進(jìn)程。任何程序都可以在命令行上加上“-qws”的選項(xiàng)來把它作為一個(gè)服務(wù)器運(yùn)行。
客戶與服務(wù)器之間的通信使用共享內(nèi)存的方法實(shí)現(xiàn),通信量應(yīng)該保持最小,例如客戶進(jìn)程直接訪問幀緩沖來完成全部的繪制操作,而不會通過服務(wù)器,客戶程序需要負(fù)責(zé)繪制它們自己的標(biāo)題欄和其他式樣。這就是Qt/Embedded庫內(nèi)部層次分明的處理過程。客戶可以使用QCOP通道交換消息。服務(wù)進(jìn)程簡單的廣播QCOP消息給所有監(jiān)聽指定通道的應(yīng)用進(jìn)程,接著應(yīng)用進(jìn)程可以把一個(gè)插槽連接到一個(gè)負(fù)責(zé)接收的信號上,從而對消息做出響應(yīng)。消息的傳遞通常伴隨著二進(jìn)制數(shù)據(jù)的傳輸,這是通過一個(gè)QDataStream類的序列化過程來實(shí)現(xiàn)的,有關(guān)這個(gè)類的描述,請讀者參考相關(guān)資料。
QProcess類提供了另外一種異步的進(jìn)程間通信機(jī)制。它用于啟動(dòng)一個(gè)外部的程序并且通過寫一個(gè)標(biāo)準(zhǔn)的輸入和讀取外部程序的標(biāo)準(zhǔn)輸出和錯(cuò)誤碼來和它們通信。
(2)字體
Qt/Embedded支持4種不同的字體格式:True Type字體(TTF),Postscript Type1字體,位圖發(fā)布字體(BDF)和Qt的預(yù)呈現(xiàn)(Pre-rendered)字體(QPF)。Qt還可以通過增加Qfont-
Factory的子類來支持其他字體,也可以支持以插件方式出現(xiàn)的反別名字體。
每個(gè)TTF或者TYPE1類型的字體首次在圖形或者文本方式的環(huán)境下被使用時(shí),這些字體的字形都會以指定的大小被預(yù)先呈現(xiàn)出來,呈現(xiàn)的結(jié)果會被緩沖。根據(jù)給定的字體尺寸(例如10或12點(diǎn)陣)預(yù)先呈現(xiàn)TTF或者TYPE1類型的字體文件并把結(jié)果以QPF的格式保存起來,這樣可以節(jié)省內(nèi)存和CPU的處理時(shí)間。QPF文件包含了一些必要的字體,這些字體可以通過makeqpf工具取得,或者通過運(yùn)行程序時(shí)加上“-savefonts”選項(xiàng)獲取。如果應(yīng)用程序中使用到的字體都是QPF格式,那么Qt/Embedded將被重新配置,并排除對TTF和TYPE1類型的字體的編譯,這樣就可以減少Q(mào)t/Embedded的庫的大小和存儲字體的空間。例如一個(gè)10點(diǎn)陣大小的包含所有ASCII字符的QPF字體文件的大小為1300字節(jié),這個(gè)文件可以直接從物理存儲格式映射成為內(nèi)存存儲格式。
Qt/Embedded的字體通常包括Unicode字體的一部分子集,ASCII和Latin-1。一個(gè)完整的16點(diǎn)陣的Unicode字體的存儲空間通常超過1MB,我們應(yīng)盡可能存儲一個(gè)字體的子集,而不是存儲所有的字,例如在一個(gè)應(yīng)用中,僅僅需要以Cappuccino字體、粗體的方式顯示產(chǎn)品的名稱,但是卻有一個(gè)包含了全部字形的字體文件。
(3)輸入設(shè)備及輸入法。
Qt/Embedded 3.0支持幾種鼠標(biāo)協(xié)議:BusMouse、IntelliMouse,Microsoft和MouseMan.Qt/
Embedded還支持NECVr41XX和iPAQ的觸摸屏。通過從QWSMouseHandler或者Qcalibra-
tedMouseHandler派生子類,開發(fā)人員可以讓Qt/Embedded支持更多的客戶指示設(shè)備。
Qt/Embedded支持標(biāo)準(zhǔn)的101鍵盤和Vr41XX按鍵,通過子類化QWSKeyboardHandler可以讓Qt/Embedded支持更多的客戶鍵盤和其他的非指示設(shè)備。
對于非拉丁語系字符(例如阿拉伯、中文、希伯來和日語)的輸入法,需要把它寫成過濾器的方式,并改變鍵盤的輸入。輸入法的作者應(yīng)該對全部的Qt API的使用有完整的認(rèn)識。在一個(gè)無鍵盤的設(shè)備上,輸入法成了惟一的輸入字符的手段。Qtopia提供了4種輸入方法:筆跡識別器、圖形化的標(biāo)準(zhǔn)鍵盤、Unicode鍵盤和基于字典方式提取的鍵盤。
(4)屏幕加速
通過子類化QScreen和QgfxRaster可以實(shí)現(xiàn)硬件加速,從而為屏幕操作帶來好處。Troll-
tech提供了Mach64和Voodoo3視頻卡的硬件加速的驅(qū)動(dòng)例子,同時(shí)可以按照協(xié)議編寫其他的驅(qū)動(dòng)程序。
2.Qt的開發(fā)環(huán)境
Qt/Embedded的開發(fā)環(huán)境可以取代那些我們熟知的UNIX和Windows開發(fā)工具。它提供了幾個(gè)跨平臺的工具使得開發(fā)變得迅速和方便,尤其是它的圖形設(shè)計(jì)器。UNIX下的開發(fā)者可以在PC機(jī)或者工作站使用虛擬緩沖幀,從而可以模仿一個(gè)和嵌入式設(shè)備的顯示終端大小,像素相同的顯示環(huán)境。
嵌入式設(shè)備的應(yīng)用可以在安裝了一個(gè)跨平臺開發(fā)工具鏈的不同的平臺上編譯。最通常的做法是在一個(gè)UNIX系統(tǒng)上安裝跨平臺的帶有l(wèi)ibc庫的GNU C++編譯器和二進(jìn)制工具。在開發(fā)的許多階段,一個(gè)可替代的做法是使用Qt的桌面版本,例如通過Qt/X11或是Qt/Windows來進(jìn)行開發(fā)。這樣開發(fā)人員就可以使用他們熟悉的開發(fā)環(huán)境,例如微軟公司的Visual C++或者Borland C++。在UNIX操作系統(tǒng)下,許多環(huán)境也是可用的,例如Kdevelop,它也支持交互式開發(fā)。
如果Qt/Embedded的應(yīng)用是在UNIX平臺下開發(fā)的話,那么它就可以在開發(fā)的機(jī)器上以一個(gè)獨(dú)立的控制臺或者虛擬緩沖幀的方式來運(yùn)行,對于后者來說,其實(shí)是有一個(gè)X11的應(yīng)用程序虛擬了一個(gè)緩沖幀。通過指定顯示設(shè)備的寬度、高度和顏色深度,虛擬出來的緩沖幀將和物理的顯示設(shè)備在每個(gè)像素上保持一致。這樣每次調(diào)試應(yīng)用時(shí)開發(fā)人員就不用總是刷新嵌入式設(shè)備的Flash存儲空間,從而加速了應(yīng)用的編譯、鏈接和運(yùn)行周期。運(yùn)行Qt的虛擬緩沖幀工具的方法是在Linux的圖形模式下運(yùn)行以下命令:
qvfb (回車)
當(dāng)Qt嵌入式的應(yīng)用程序要把顯示結(jié)果輸出到虛擬緩沖幀時(shí),我們在命令行運(yùn)行這個(gè)程序,并在程序名后加上-qws的選項(xiàng)。例如:$》 hello–qws。
3.Qt的支撐工具
Qt包含了許多支持嵌入式系統(tǒng)開發(fā)的工具,有兩個(gè)最實(shí)用的工具是qmake和Qt designer(圖形設(shè)計(jì)器)。
n qmake是一個(gè)為編譯Qt/Embedded庫和應(yīng)用而提供的Makefile生成器。它能夠根據(jù)一個(gè)工程文件(.pro)產(chǎn)生不同平臺下的Makefile文件。qmake支持跨平臺開發(fā)和影子生成,影子生成是指當(dāng)工程的源代碼共享給網(wǎng)絡(luò)上的多臺機(jī)器時(shí),每臺機(jī)器編譯鏈接這個(gè)工程的代碼將在不同的子路徑下完成,這樣就不會覆蓋別人的編譯鏈接生成的文件。qmake還易于在不同的配置之間切換。
n Qt圖形設(shè)計(jì)器可以使開發(fā)者可視化地設(shè)計(jì)對話框而不需編寫代碼。使用Qt圖形設(shè)計(jì)器的布局管理可以生成能平滑改變尺寸的對話框。
qmake和Qt圖形設(shè)計(jì)器是完全集成在一起的。
12.2.2 Qt/Embedded信號和插槽機(jī)制
1.機(jī)制概述
信號和插槽機(jī)制是Qt的核心機(jī)制,要精通Qt編程就必須對信號和插槽有所了解。信號和插槽是一種高級接口,應(yīng)用于對象之間的通信,它是Qt的核心特性,也是Qt區(qū)別于其他工具包的重要地方。信號和插槽是Qt自行定義的一種通信機(jī)制,它獨(dú)立于標(biāo)準(zhǔn)的C/C++語言,因此要正確地處理信號和插槽,必須借助一個(gè)稱為moc(Meta Object Compiler)的Qt工具,該工具是一個(gè)C++預(yù)處理程序,它為高層次的事件處理自動(dòng)生成所需要的附加代碼。
所謂圖形用戶接口的應(yīng)用就是要對用戶的動(dòng)作做出響應(yīng)。例如,當(dāng)用戶單擊了一個(gè)菜單項(xiàng)或是工具欄的按鈕時(shí),應(yīng)用程序會執(zhí)行某些代碼。大部分情況下,是希望不同類型的對象之間能夠進(jìn)行通信。程序員必須把事件和相關(guān)代碼聯(lián)系起來,這樣才能對事件做出響應(yīng)。以前的工具開發(fā)包使用的事件響應(yīng)機(jī)制是易崩潰的,不夠健壯的,同時(shí)也不是面向?qū)ο蟮摹?br /> 以前,當(dāng)使用回調(diào)函數(shù)機(jī)制把某段響應(yīng)代碼和一個(gè)按鈕的動(dòng)作相關(guān)聯(lián)時(shí),通常把那段響應(yīng)代碼寫成一個(gè)函數(shù),然后把這個(gè)函數(shù)的地址指針傳給按鈕,當(dāng)那個(gè)按鈕被單擊時(shí),這個(gè)函數(shù)就會被執(zhí)行。對于這種方式,以前的開發(fā)包不能夠確保回調(diào)函數(shù)被執(zhí)行時(shí)所傳遞進(jìn)來的函數(shù)參數(shù)就是正確的類型,因此容易造成進(jìn)程崩潰。另外一個(gè)問題是,回調(diào)這種方式緊緊地綁定了圖形用戶接口的功能元素,因而很難進(jìn)行獨(dú)立的開發(fā)。
信號與插槽機(jī)制是不同的。它是一種強(qiáng)有力的對象間通信機(jī)制,完全可以取代原始的回調(diào)和消息映射機(jī)制。在Qt中信號和插槽取代了上述這些凌亂的函數(shù)指針,使得用戶編寫這些通信程序更為簡潔明了。信號和插槽能攜帶任意數(shù)量和任意類型的參數(shù),它們是類型完全安全的,因此不會像回調(diào)函數(shù)那樣產(chǎn)生core dumps。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 基于嵌入式Linux系統(tǒng)的Qt-Embedded圖像處理界面開發(fā)總結(jié)
- 嵌入式LINUX的Qt開發(fā)入門教程
- 嵌入式LINUX的Qt開發(fā)入門教程詳細(xì)說明 31次下載
- Qt Creator快速入門教程之Qt對象模型與容器類的詳細(xì)資料說明 24次下載
- Qt及Qt Quick開發(fā)實(shí)戰(zhàn)精解PDF電子書免費(fèi)下載 307次下載
- 如何在linux操作系統(tǒng)的機(jī)器上安裝Qt圖形開發(fā)環(huán)境安裝手冊免費(fèi)下載 19次下載
- Linux下Qt編程入門教程 11次下載
- Qt_Embedded在多功能麻醉機(jī)心電監(jiān)護(hù)中的應(yīng)用_蹇平 3次下載
- 基于Linux及Qt_Embedded的壓鑄車間數(shù)據(jù)采集系統(tǒng)設(shè)計(jì) 0次下載
- Qt嵌入式圖形開發(fā)(基礎(chǔ)篇) 51次下載
- Qt嵌入式圖形開發(fā)(入門篇) 125次下載
- 基于S3C2410嵌入式平臺和Qt/Embedded的數(shù)碼相
- 基于Qt/Embedded的嵌入式控制界面開發(fā)
- 為Qt/Embedded 添加觸摸屏驅(qū)動(dòng)
- Qt/Embedded在嵌入式Linux系統(tǒng)中的應(yīng)用
- 【GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(3)使用 Embedded Builder 開發(fā) GD32 1064次閱讀
- QT5+OpenCV4搭建應(yīng)用開發(fā)環(huán)境 1131次閱讀
- 米爾NXP i.MX 93開發(fā)板的Qt開發(fā)指南 1794次閱讀
- Qt上位機(jī)開發(fā)實(shí)戰(zhàn)案例 2696次閱讀
- 3562-Qt工程編譯說明 502次閱讀
- QT串口通信的簡單使用 2116次閱讀
- 基于AMD SOC的QT應(yīng)用程序開發(fā) 1163次閱讀
- Qt的QApplication不簡單! 3039次閱讀
- Qt Designer中提供的原生界面元素 2042次閱讀
- QT環(huán)境搭建教程 1346次閱讀
- Qt Quick開發(fā)工具總結(jié) 1973次閱讀
- Qt開發(fā)實(shí)現(xiàn)SCARA機(jī)械手正反解的建立 1368次閱讀
- Embedded Tools介紹和使用方法 5800次閱讀
- 嵌入式LINUX的Qt開發(fā)入門教程 2.1w次閱讀
- 基于Qt/Embedded觸摸屏的智能家居控制系統(tǒng) 7799次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論