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