關於qt embed 服務端和客戶端

http://blog.sina.com.cn/s/blog_52504e3f0100hadv.html

QT Embedded-----QWSServer

(2010-03-12 16:01:48)
標籤:

雜談

分類:QT
QT Embeded應用沒有來嚴格的區分server和client進程,如果一個QT進程的啓動參數中有-qws,那麼這個進程就具有server管理功能,被稱爲QWSserver,當然這個進程同樣可以和其它的QT進程一樣可以創建並顯示widget,只有兼做server的功能而已。
 
這個所謂的server功能主要是由QWSServer對象來實現的。
     1.QWSServer的管理對象
     (1)keyboard設備和mouse設備
     keyboard和mouse是一個display系統的輸入設備,在QTEmbedded中,QWSServer會初始化keyboard和mouse設備,並對其管理。讀取key事件和mouse事件,並傳送給相應的應用程序
     至於diplay系統中的顯示設備screen,這不是由QWSServer統一管理的,爲了提高效率,每個QTClient都可以打開這個設備,並向screen讀寫,以實現顯示功能。但是每個QTclient都向screen讀寫,屏幕會不會寫亂了?在QT中,這部分工作是由一個叫做QWSRegionManager的對角來管理的,以後再詳細說明。

     (2)QWSClient
     看上去,QWSServerQWSClient這兩個類應該組成一個c/s結構,實際上QWSServer代表一個server socket. 當QTClient連接到QWSServer的server socket時,QWSServer會產生一個client socket與QTClient的socket進行通訊。QWSClient看上去像一個stub對象,代表一個QTclient進程。每個QT Client進程在QWSserver進程都有相應的QWSClient。

     (3)QWSWindow
     QWSWindow對應於QTClient的toplevel widget。nontoplevelwidget由於每個QT Client自行管理。所有toplevelwidget需要接受QWS Server的管理,包括widget的focus,altitude,region等。

     (4)其它
     QWSServer管理的其它全局對象,還有QWSScreenSaver,QWSSoundServer等。

   2.QWSServer的初始化
     QWSServer的初始化是在QApplication的初始化過程中完成的,具體的流程如下:
     QApplication::construct-->qt_init-->QWSServer::startup
     QWSServer::startup是一個static函數,創建全局對象qwsServer.QWSServer的構造函數會依次初始化所管理的對象。

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章