Qt之QWS
2017-03-20 17:35
127 查看
QWS:Qt Windows System
在Qt中的术语QWS的全称是Qt windows system,是Qt自行开发的窗口系统,体系结构类似X-Windows,是一个Client/Server结构,由QWSServer在物理设备上显示,由QWSClient实现界面,两者通过socket进行彼此的通讯。在很多嵌入式系统里,Qt程序基本上都是用QWS来实现其显示,这样就保证了程序的可移植性。
Qt-Embeded应用程序没有严格地区分server和client进程。
如果一个Qt进程的启动参数中有-qws,那么这个进程就具有server管理功能,被称为QWS Server,当然这个进程同样可以和其它的QT进程一样可以创建并显示widget,只是兼做server的功能而已。
而不带-qws这个参数就是QWS Client。
任何一个基于Qt的Application都可以做QWS Server。当然QWSServer一定先于QWS Client启动,否则QWS Client将启动失败。
在实际应用中,会指定某个特殊的Application做QWS Server,这个application一般还会管理一些其它的系统资源。
QT Embeded应用没有严格的区分server和client进程,如果一个QT进程的启动参数中有-qws,那么这个进程就具有server管理功能,被称为QWS server,当然这个进程同样可以和其它的QT进程一样可以创建并显示widget,只有兼做server的功能而已。
这个所谓的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的构造函数会依次初始化所管理的对象。
在Qt中的术语QWS的全称是Qt windows system,是Qt自行开发的窗口系统,体系结构类似X-Windows,是一个Client/Server结构,由QWSServer在物理设备上显示,由QWSClient实现界面,两者通过socket进行彼此的通讯。在很多嵌入式系统里,Qt程序基本上都是用QWS来实现其显示,这样就保证了程序的可移植性。
Qt-Embeded应用程序没有严格地区分server和client进程。
如果一个Qt进程的启动参数中有-qws,那么这个进程就具有server管理功能,被称为QWS Server,当然这个进程同样可以和其它的QT进程一样可以创建并显示widget,只是兼做server的功能而已。
而不带-qws这个参数就是QWS Client。
任何一个基于Qt的Application都可以做QWS Server。当然QWSServer一定先于QWS Client启动,否则QWS Client将启动失败。
在实际应用中,会指定某个特殊的Application做QWS Server,这个application一般还会管理一些其它的系统资源。
QT Embeded应用没有严格的区分server和client进程,如果一个QT进程的启动参数中有-qws,那么这个进程就具有server管理功能,被称为QWS server,当然这个进程同样可以和其它的QT进程一样可以创建并显示widget,只有兼做server的功能而已。
这个所谓的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的构造函数会依次初始化所管理的对象。
相关文章推荐
- QT中QWS的含义
- QT中QWS的含义
- QT - QWSServer
- QT学习笔记(二):QWSServer class
- 嵌入式qt中的qws
- Qt 命令 -qws
- QT中QWS的含义
- Qt显示程序之QWS_DISPLAY
- Qt中qws的含义
- 使mini2440的Qt程序横屏显示,-qt-gfx-transformed与QWS_DISPLAY
- QT中QWS的含义
- 【已解决】qt 调用外部应用报错 QWSLock::down(): Invalid argument QWSLock::up(): Invalid argumen
- Qt中qws的含义
- 如何使用QWS_MOUSE_PROTO,配置qt的鼠标
- 【Qt开发】【Linux开发】QT设置环境变量QWS_DISPLAY
- [zz]QT ARM提示QWSDisplay::Data::init: Invalid argument Client can't attach to main ram memory. Aborted
- QT Embedded之QWSClient
- hi3515 QT设置环境变量QWS_DISPLAY
- 嵌入式Qt程序启动参数-qws
- 【转】QT中QWS的含义