QWS Server

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的构造函数会依次初始化所管理的对象。

最新文章

  1. [解决方案] pythonchallenge level 6
  2. Lombok(1.14.8) - @Getter, @Setter, @ToString, @EqualsAndHashCode & @Data
  3. Java基础知识强化94:Calendar类之Calendar概述和获取日历字段的方法
  4. STL 源代码分析 算法 stl_algo.h -- includes
  5. .Net Core应用框架Util介绍(四)
  6. 常用的HTML模板(转载)
  7. 阿里云香港B区通过IPV6规避Google验证码
  8. 【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
  9. iPhone开发--正则表达式获取字符串中的内容
  10. codeforces 633E Startup Funding(浮点数处理)
  11. hdu 5833(欧拉路)
  12. python gensim的第一次试用
  13. 添加字段modify
  14. 你自认为理解了JavaScript?【转】
  15. UML动态模型(顺序图、协作图、状态图)
  16. 报错:org.apache.jasper.JasperException: /jsp/head.jsp (line: 1, column: 2) Page directive: illegal to
  17. hihoCoder#1068(RMQ-ST算法)
  18. easyui combobox with checkbox item
  19. 删除警告的方法 python
  20. MQTT,XMPP,STOMP,AMQP,WAMP适用范围优缺点比较

热门文章

  1. Tarjan算法【阅读笔记】
  2. 边学边体验django--模型
  3. SIGAI深度学习第一集 机器学习与数学基础知识
  4. ODBC连接到400
  5. Qt ASSERT:"QMetaObjectPrivate::get(smeta)->revision>= 7"in file kernel\qobject.cpp,line 2646
  6. 【概率论】3-3:累积分布函数(Cumulative Distribution Function)
  7. Luogu [P3622] [APIO2007]动物园
  8. 通过zabbix来监控树莓派
  9. 3-自定义构造方法和description方法
  10. leveldb源码分析之Slice