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