Qt介紹---QPA(Qt Platform Abstraction)

來源

Qt是一個誇平臺的庫(其一直宣稱“Qt everywhere”),但是Qt底層不是誇平臺的。

比如:Qt中Gui部件的核心類QWidget,該類除了qwidget.h 和 qwidget.cpp兩個原文件外,還有

kernel/qwidget_mac.mm
kernel/qwidget_qws.cpp
kernel/qwidget_win.cpp
kernel/qwidget_s60.cpp
kernel/qwidget_x11.cpp
kernel/qwidget_wince.cpp

在源代碼中,還有隨處可見的

 

 
1
2
3
4
5
6
7
8
#if defined(Q_WS_X11)
...
#elif defined(Q_WS_MAC)
...
#elif defined(Q_WS_WIN)
...
#endif
 

 

而這一切都使得將 Qt 移植到一個新的窗口系統變的不太容易。

Lighthouse is the project name for the Qt Platform Abstraction – making it much easier to port Qt to new platforms.
Lighthouse是Qt Platform Abstraction項目的名字。它使得將Qt移植到新的平臺變得比容易。

那麼什麼是Qt Platform Abstraction(QPA)?

Qt Platform Abstraction

From the Qt Project wiki :

“QPA is the platform abstraction layer for Qt 5 and replaces QWS and the platform ports from Qt 4.”
QPA (Qt Platform Abstraction) 即Qt平臺抽象層, 移植自Qt4, 在Qt5中替代QWS(Qt Window System)

Qt5.0開始,Qt自身不再單獨實現窗口系統,QWS不復存在,取而代之的新機制是QPA(Qt平臺抽象),QPA使得Qt對不同平臺的支持變得更加靈活,當需要支持一個新平臺時,只需爲該平臺編寫一個QPA插件。

QPA的相關代碼在qtbase/src/gui/kernel/qplatform*
其插件在qtbase/src/plugins/platforms/

簡單說說QWS

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 Client的?QWS Server是一個server socket,QWS Client是一個client socket。QWS Client啓動時會主動向QWS Server的server socket建立連接。而後就QWS Server通過這個socket傳遞QWSCommand和QWSEvent來管理QWS Client。

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