刚才子西研究了一下, 发现我的开始的想法是不对的.....
我现在的理解是QApplication在初始花时实例化了一个 QWSserver ,同时赋值给上面的那个全局的 extern QWSServer *qwsServer,此时,qwsServer 在程序中主要负责事件的服务分发,比如 QWSServer中的三个Singal :
void windowEvent ( QWSWindow * w, QWSServer::WindowEvent e ) [note : 我的assitant是qt3.1.1,qte好
想有点不同,好想是什么 ApplicationEvent 吧 ]
void newChannel ( const QString & channel )
void removedChannel ( const QString & channel )
特别是第一个signal,主要在top-level window窗口转换时 emit 的,而其他两个主要勇于create/remove 程序中的channel [问: 是不是在client 程序中的create/remove channel 也会发送??] 时 emit 的,,,,,
同时, QWSServer也能发送sendKeyEvent 和 sendIMEvent 等等,,,( from assistant )
同事QWSServer也能设置 setKeyboardFilter(键盘过滤函数) ,在这里有一个sample 大家可疑看一看 *_*
http://www.mis.mit.edu.tw/docs/docs/qt-embedded-devel-2.3.2/examples/launcher/launcher.cpp 还有设置mouse设备 setDefaultMouse( const char * m ),打开/关闭mouse设备的函数:openMouse (),closeMouse () 以及设置keyboard 设备,打开关闭 keyboard 的操作
以上这些我是看assistant 的理解,,,,
总结一下:如果QApplication设置成了GUI::Server模式,那么在QApplication初始化时就会实例化上面的哪个全局变量qwsServer,那么我们就能在该QApplication 程序中,对qwsServer 由于事件改变而emit的三个Singal :
windowEvent,newChannel ,removedChannel 进行connent,之后进行自定义的处理....
而如果QApplication不是设置成了GUI::Server模式,那么qwsServer是否就为0 ???我认为是0,,,,那么我们就不能使用qwsServer参数了,,,
顺这这个思路,我们就能明白QApplication设置成了GUI::Server模式的作用了,,,就是一个server的角色,他能够捕捉运行在其上的 client 程序的发生的动作,同事也能设置所有程序的mouse ,,keyboard等等....
图:
| client App1 | || client App2 | | client App3 | | client App4 |
-------------------------------------------------------------
| Server |
更漂亮的如:
http://www.uml.org.cn/embeded/200510181.htm以上是我的理解,share一下,刚开始作QT,不到2周,希望大家支出有误的地方,一起交流!!
谢谢!!!! 写到好累......