Qt Platform Abstraction(QPA)简介

来源

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

在源代码中,还有随处可见的

而这一切都使得将 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。

参考:
http://doc.qt.io/qt-5/qpa.html
A Simple Introduction to Qt Platform Abstraction
http://blog.csdn.net/dbzhang800/article/details/6526535

相关文章

  • 没有相关文章 :(
0 条评论
发表一条评论

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。