QApplication代表着QT Embedded应用程序的运行时对象,类似于MFC的CWinApp。应用程序可以通过一个全局指针变量qApp表访问当前应用程序的QApplication。
1.QApplication的初始化
对于QT应用程序来说,每一个进程都必需首先初始化一个QApplication的全局对象qApp。一般来说,都是在main函数开始的时候,声明一个QApplication的局部变量。同时,QApplication也初始化了一些全局变量:QWSServer,QWSDiplay,QScreen.
QApplication的初始化过程,主要是由QApplication::construct来实现的,
void QApplication::construct( int &argc, char **argv, Type type )
{
qt_appType = type;
qt_is_gui_used = (type != Tty);
//分析程序启动时的传入参数
init_precmdline();
static const char *empty = "";
if ( argc == 0 || argv == 0 ) {
argc = 0;
argv = (char **)∅ // ouch! careful with QApplication::argv()!
}
app_argc = argc;
app_argv = argv;
//QT全局对象的初始化,QWSServer, QWSDiplay,QScreen
qt_init( &argc, argv, type ); // Must be called before initialize()
//分析程序启动时的传入参数
process_cmdline( &argc, argv );
//初始化QApplication本身的一些参数
initialize( argc, argv );
...........
}
2.QApplication所管理的内容
(1)通过QWSDisplay与QWSServer进行通讯
发送QWSCommand到QWSServer,同时接受QWSServer发回来的QWSEvent.这是与QWSServer以及与其它QT client的基础,也是QWSSServer管理QT Client的基础。
QWSCommand包括:创建toplevel widget,更改toplevel widget的属性(focus,altitude,region),QCopChannel事件等。
QWSEvent包括toplevel窗口的管理,键盘事件,鼠标事件,QCopChannel事件等.
QWSCommand是一种request,不是command,client应该向server request资源,不是下达command.同样部分QWSEvent属于server的response,当然有一些确实是由某一QT client的request,影响到其它的QT Client, server是要发出QWSEvent通知受影响的QT Client.
(2)窗口对象
all widget, all toplevel widget,all popup widget, all model widget
focus widget, active widget, active popup widget, active model widget.
(3)消息循环
exec()会启动消息循环,消息循环的主要功能是有QEventLoop来实现。比如你打开一个app,理论上程序执行一次就完了,他为什么会一直显示它的界面,就是在一直循环。这也就是ecec()的一个作用的体现。
(4)graphic对象
cursor,palette,font,screen,style
(5)其它
转载自:http://blog.sina.com.cn/s/blog_6568e7880100hpr0.html