全部博文(18)
分类: LINUX
2009-03-16 01:09:40
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来实现。
(4)graphic对象
cursor,palette,font,screen,style
(5)其它