qt 啟動參數 -qws


運行嵌入式程序

在嵌入式QT版本中,程序需要服務器或自己作為服務器程序。

服務器程序構造的方法是構造一個QApplication::GuiServe類型的QApplication對象。或者使用-qws命令選項啟動程序。

Using a Single Display
使用-qws選項

using Mutiple Displays
嵌入式版本中運行多個縣市同時運行。兩種方式可以實現,要么多次運行服務程序,要么使用read-mae Multi screen driver
當多個服務程序運行時,每個程序必須使用-display選項指定顯示驅動,或者使用QWS_DISPLAY環境變量來指定。
服務程序運行時:
./mysecondserverapplication -qws -display "QVFb:2"
客戶程序運行時:
./myclientapplication -display "QVFb:2"

若想在不同顯示器移動應用程序,則只能通過Muti顯示器實現。
./myserverapplication -qws -display "Multi: QVFb:0
QVFb:1:offset=0,0 VNC:offset=640,0 :2"

程序啟動命令選項:
-fn<font>         定義程序的字體,例如./myapplication -fn helvetica

-bg<color>                設置程序默認背景顏色 例如./myapplication -bg blue,顏色名稱必須能被QColor類構造函數識別

-btn<color>                設置默認的按鈕顏色,例如./myapplication -btn green 同樣顏色必須被認識

-fg<color>                設置foreground顏色,例如./myapplication -fg 'dark blue' 同上需被認識

-name <objectname>    設置應用程序名字 例如./myapplication -name texteditapplication

-title <title>        設置應用程序標題。./myapplication -title 'Text Edit'

-geometry <width>x<height>+<Xoffset>+<Yoffset>
設置窗口大小, ./myapplication -geometry 300x200+50+50

-keyboard                    啟動鍵盤

-nokeyboard                關閉鍵盤

-mouse                        啟動鼠標

-nomouse                    關閉鼠標

-qws                            設置為服務程序

-display                    設置顯示器驅動

-decoration<style>
設置程序的風格,例如./myapplication -decoration windows,只支持windows default styled 

 

QWSServer

QT Embeded應用沒有來嚴格的區分server和client進程,如果一個QT進程的啟動參數中有-qws,那么這個進程就具有server管理功能,被稱為QWS server,當然這個進程同樣可以和其它的QT進程一樣可以創建並顯示widget,只有兼做server的功能而已。不帶-qws這個參數就是QWS Client。因此任何一個基於QT的application都可以做QWS Server。當然QWS Server一定先於QWS Client啟動,否則QWS Client將啟動失敗。

QWS Server是一個server socket,QWS Client是一個client socket。QWS Client啟動時會主動向QWS Server的server socket建立連接。而后就QWS Server通過這個socket傳遞QWSCommand和QWSEvent來管理QWS Client。

 這個所謂的server功能主要是由QWSServer對象來實現的。
     1.QWSServer的管理對象
     (1)keyboard設備和mouse設備
     keyboard和mouse是一個display系統的輸入設備,在QT Embedded中,QWSServer會初始化keyboard和mouse設備,並對其管理。讀取key事件和mouse事件,並傳送給相應的應用程序。
     至於diplay系統中的顯示設備screen,這不是由QWSServer統一管理的,為了提高效率,每個QT Client都可以打開這個設備,並向screen讀寫,以實現顯示功能。但是每個QT client都向screen讀寫,屏幕會不會寫亂了? 在QT中,這部分工作是由一個叫做QWSRegionManager的對角來管理的,以后再詳細說明。

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

     (3)QWSWindow
     QWSWindow對應於QT Client的toplevel widget。nontoplevel widget由於每個QT Client自行管理。所有toplevel widget需要接受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的構造函數會依次初始化所管理的對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM