Qt/E服務(wù)器客戶端架構(gòu)
Qt / E是專(zhuān)門(mén)為嵌入式系統(tǒng)開(kāi)發(fā)的GUI平臺(tái),因此它并沒(méi)有像Qt/X11版一樣依賴(lài)復(fù)雜的X-Server,而是專(zhuān)門(mén)針對(duì)嵌入式平臺(tái)特性開(kāi)發(fā)了簡(jiǎn)化且高效的Server端,底層只支持Frame buffer設(shè)備,兩者之間的通信方式仍然采用Unix域Socket,但是通信協(xié)議相比X11大大簡(jiǎn)化,這樣在保證API一致性的前提下,提供了跨平臺(tái)的支持。采用專(zhuān)用的服務(wù)器客戶端架構(gòu)是Qt/E與桌面系統(tǒng)最大的不同。同時(shí)由于Qt/E版的Server端相對(duì)簡(jiǎn)單,并且為了適應(yīng)嵌入式系統(tǒng)硬件平臺(tái)的巨大差異做了很多兼容工作,也使得對(duì)于Qt/E的移植相對(duì)比較容易,只要實(shí)現(xiàn)鼠標(biāo),鍵盤(pán),屏幕相應(yīng)的驅(qū)動(dòng)就可以實(shí)現(xiàn)Qt/E的移植。
所有的Qt圖形應(yīng)用程序要運(yùn)行就必須連接到Qt 服務(wù)器,Qt服務(wù)器負(fù)責(zé)管理鼠標(biāo),鍵盤(pán),屏幕這些輸入輸出設(shè)備,同時(shí)還進(jìn)行窗口管理,處理窗口重疊,移動(dòng),焦點(diǎn)轉(zhuǎn)換,字體管理,輸入法管理等。而Client端則是在窗口內(nèi)部進(jìn)行Widget的管理,繪制,以及文件,網(wǎng)絡(luò)等其他操作,等待服務(wù)器端傳遞過(guò)來(lái)的用戶輸入事件,然后在繪制完畢以后發(fā)消息通知服務(wù)器,由服務(wù)器進(jìn)程控制顯示(對(duì)于支持Direct Painting的設(shè)備,是直接繪制到顯示設(shè)備上)。
下圖是Qt/E的客戶端服務(wù)器架構(gòu):
由于Qt設(shè)計(jì)時(shí)出于資源節(jié)省的考慮以及靈活性,服務(wù)器進(jìn)程并不是一個(gè)單獨(dú)的進(jìn)程,而是第一個(gè)啟動(dòng)的Qt圖形應(yīng)用程序,它既是客戶端進(jìn)程,也是服務(wù)器端進(jìn)程,從程序設(shè)計(jì)的角度來(lái)說(shuō)它可以和正常的客戶端進(jìn)程表現(xiàn)完全一致,但是它卻掌管著對(duì)所有的設(shè)備的訪問(wèn),這樣的設(shè)計(jì)會(huì)導(dǎo)致Qt架構(gòu)內(nèi)部不是那么清晰,但是好處也是非常明顯的,因?yàn)榉?wù)器端進(jìn)程同時(shí)也是一個(gè)客戶端進(jìn)程,可以直接和用戶進(jìn)行一些特殊的交互,比如像Qt/E中的輸入法設(shè)計(jì)等等。
【編輯推薦】
用Qt為Symbian開(kāi)發(fā)應(yīng)用程序
深度解析嵌入式QT開(kāi)發(fā)環(huán)境搭建
手機(jī)應(yīng)用客戶端瞄準(zhǔn)移動(dòng)消費(fèi)需求