QT QApplication初始化是怎样的呢?

来源:互联网 发布:spark 编程 编辑:程序博客网 时间:2024/06/11 17:20

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

0 1
原创粉丝点击