1. 程式人生 > >【SylixOS】QT程式啟動載入流程簡介(一)

【SylixOS】QT程式啟動載入流程簡介(一)

  1. QT應用程式啟動載入流程簡介

QWS(Qt Windows System)是QT自行開發的視窗系統,體系結構類似X Windows的C/S結構。QWS Server在物理裝置上顯示,QWS Client實現介面,兩者通過socket進行彼此的通訊。在很多嵌入式系統裡,QT程式基本上都是用QWS來實現,這樣保證程式的可移植性。

在執行QT程式時新增-qws引數,表示這個程式是QWS Server,否則是QWS Client。任何一個基於QT的application都可以做QWS Server。QWS Server一定先於QWS Client啟動,否則QWS Client將啟動失敗。在實際應用中一般會指定某個特殊的application做QWS Server,這個application一般還會管理一些其它的系統資源。

QWS Server管理機制:QWS Server是一個server socket,QWS Client是一個client socket。QWS Client啟動時會主動向QWS Server的server socket建立連線。而後QWS Server通過這個socket傳遞QWS Command和QWS Event來管理QWS Client。

QPA (Qt Platform Abstraction)QT5的平臺抽象層,並取代QT4中的QWS和平臺埠。從QT5開始,QT自身不再單獨實現視窗系統,QWS不復存在,取而代之的新機制是QPA,QPA使得QT對不同平臺的支援變得更加靈活,當需要支援一個新平臺時,只需為該平臺編寫一個QPA外掛。QPA的相關程式碼分別在qtbase/serc/gui/kernel/qplatform/目錄下,以及平臺抽象層外掛在qtbase/src/plugins/platforms/目錄下。

QT4的程式在嵌入式Linux執行時,需要加入引數“-qws”啟動QT視窗系統服務,如“./app -qws”執行app程式。QT5的程式執行時根據QT_QPA_PLATFORM變數指定的預設QPA外掛,執行app程式, 也可以根據需要通過“-platform”來指定QPA外掛執行,如:./app -platform eglfs、./app -platform sylixosfb。

    1. QT程式簡單示例

QT作為GUI介面庫,提供了不同功能模組的程式設計介面,例如基本控制元件庫、資料庫操作、圖表庫、瀏覽器控制元件、以及3D模組。另外QT也提供一種類似HTML解釋性指令碼語言QML,並且與JavaScrip指令碼的互動,提供了良好的介面操作。程式設計師可以通過C++和QML語言開發應用程式。如圖 1.1所示:

1.1 qt應用程式示例

通過圖 1.1客戶端程式分析QT程式初始化流程。一個客戶端程式建立的時候,都會首先建立一個QApplication app物件,它為客戶端程式提供必須的執行環境。具體流程如圖 1.2所示:

圖 1.2 QApplication載入流程

QGuiApplication在QT程式初始化中處於重要的地位,它主要初始化父類、解析命令列輸入、初始化視窗的風格、初始化QPA、載入QT外掛、初始化Gui資源、以及初始化OpenGL上下文環境。如圖 1.3所示:

1.3 GUI初始化核心階段

在QT5中可以根據不同系統提供QPA外掛,為客戶端程式提供顯示服務,在SylixOS系統下,提供platform/plugin/sylixosfb 平臺抽象層外掛,為QT客戶端程式提供渲染執行環境。如圖 1.4所示:

1.4 建立SylixOS QPA外掛

QCoreApplication為客戶端程式提供國際化支援、以及事件分發機制。