1、QApplication

QApplication类管理GUI程序的控制流和主要设置,是基于QWidget的,为此特化了QGuiApplication的一些功能,处理QWidget特有的初始化和结束收尾工作。 
对于使用了Qt的任何GUI程序来说,不管何时何地有多少个Window,但只有一个QApplication对象,如果不是基于QWidget的程序,相应的则使用QGuiApplication,后者不依赖于Widget特有的库。 
有些程序是不使用GUI的,通过命令行参数执行不同的任务而不用手动设置,这时使用QCoreApplication就够了,避免初始化不必要的GUI资源。

上面提到了只能有一个QApplication实例,其实就是Singleton模式,对象指针通过instance()静态函数获取,或者使用等效的qApp宏。QApplication的主要职责如下: 
1、使用用户的桌面设置进行初始化,这些设置如palette()font()doubleClickInterval(),然后跟踪这些属性的变化,如用户通过某种配置面板修改了全局桌面设置。 
2、处理事件,从窗口系统接收事件并派发到相应的Widget,使用sendEvent()postEvent()函数可以派发事件。 
3、处理命令行参数,设置内部状态。 
4、定义GUI外观,外观由QStyle对象包装,运行时通过setStyle()函数进行设置。 
5、设置颜色分配规则,对应的函数为setColorSpec()。 
6、本地化字符串,函数为translate()。 
7、提供了一些有用的对象,如desktop()clipboard()函数。 
8、知道Widget及Window,相应的函数为widgetAt()topLevelWidgets()closeAllWindows()。 
9、管理鼠标光标,函数为setOverrideCursor()。 
从上面可以看出,QApplication作了许多初始化工作,因此在任何其它的UI对象创建之前必须先创建QApplication对象,而且还可以通过命令行参数设置一些内部状态。

2、QGuiApplication

QApplication继承自QGuiApplication,后者是基于非QWidget的,提供了会话管理,用户退出时可以友好地终止程序,如果终止不了还可以取消对应的进程,甚至是保存程序的所有状态用于将来的会话,相关函数为isSessionRestored()sessionId()commitDataRequest()saveDataRequest()

3、QCoreApplication

QGuiApplication继承自QCoreApplication,后者不包括UI,一大核心功能是提供了event loop,这些event可以来自操作系统,如timer、网络事件,以及其它来源的event都可以被收发。调用exec()函数进入event loop,直到quit()函数调用时才退出,退出时发送aboutToQuit()信号,等同于exit(0)函数,sendEvent()函数立即处理事件,postEvent()函数把事件放入消息队列以等待后续处理,处于消息队列的的event还可以通过removePostedEvent()sendPostedEvent()进行删除和立即处理。 
与程序路径相关的有两个函数applicationDirPath()applicationFilePath(),另外一个是库相关的,函数为libraryPaths()setLibraryPaths()addLibraryPath()removeLibraryPath(),以及QLibrary类。 
国际化、翻译相关的函数为translate(),以及installTranslator()removeTranslator()。 
获取命令行参数使用函数arguments(),专门处理命令行参数的类为QCommandLineParser。 
为了保证兼容性,还要适当的设置语系setLocale()

Qt 之 QApplication的更多相关文章

  1. [QT]给QApplication安装事件过滤器 app.installEventFilter

    Qt的事件处理有5种级别: 1.      重写控件的事件处理函数:如重写keyPressEvent(),mousePressEvent()和paintEvent(),这是最常用的事件处理方法,我们已 ...

  2. QT 入门 -QApplication QPushButton QDialog Ui类型的手工使用

    QT 1.工具 assistant  帮助文档 qtconfig  QT配置工具 qmake     QT的make与项目文件智能创建工具 uic          UI界面的设计文件的编译工具 mo ...

  3. 【QT】QApplication简介

    1.QApplication QApplication类管理GUI程序的控制流和主要设置,是基于QWidget的,为此特化了QGuiApplication的一些功能,处理QWidget特有的初始化和结 ...

  4. Qt 模拟鼠标点击(QApplication::sendEvent(ui->pushbutton, &event0);)

    QPoint pos(0,0);QMouseEvent event0(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt ...

  5. (转)Qt中文手册 之 QApplication

    QApplication管理GUI程序的控制流和主要设置. QApplication包含由窗口系统和其他来源处理过和发送过的主事件循环.它也处理应用程序的初始化和收尾工作,并提供对话管理.QAppli ...

  6. Qt实用小技巧(转)

    原博网址:http://www.cnblogs.com/feiyangqingyun/archive/2010/12/06/1898143.html 1.如果在窗体关闭前自行判断是否可关闭答:重新实现 ...

  7. Qt之加载QSS文件

    简述 Qt中关于样式的使用很常见,为了降低耦合性(与逻辑代码分离),我们通常会定义一个QSS文件,然后编写各种部件(例如:QLable.QLineEdit.QPushButton)的样式,最后使用QA ...

  8. Qt事件处理机制

    研一的时候开始使用Qt,感觉用Qt开发图形界面比MFC的一套框架来方便的多.后来由于项目的需要,也没有再接触Qt了.现在要重新拾起来,于是要从基础学起. Now,开始学习Qt事件处理机制. 先给出原文 ...

  9. 【转】解读Qt 事件处理机制(上篇)

    [转自]:http://mobile.51cto.com/symbian-272812.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生 ...

随机推荐

  1. OrChard快速开发一个网站,个人网站

    Orchard中文 登录 主页 文档 下载 博客文章 论坛 联系我们 Orchard是一个以微软为主导的开源CMS项目,它允许使用者在Asp.Net平台上快速建立网站,并且提供扩展框架能够允许定制人员 ...

  2. 【旧文章搬运】获取并修改PEB中的映像路径,命令行和当前目录

    原文发表于百度空间,2008-7-24 当时对UNICODE_STRING的使用还有点问题,导致最终效果图中字符串被截断了======================================= ...

  3. 【华为2016上机试题C++】最高分是多少

    [编程题] 最高分是多少 时间限制:1秒 空间限制:65536K 老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括 ...

  4. E20170405-gg

    repository n. 存储库,知识库 Permanent adj 永久的 host      n 主机,住处人,主人 authenticate v 使生效,验证 shell n 外壳 commi ...

  5. BERT的几个可能的应用

      BERT是谷歌公司于2018年11月发布的一款新模型,它一种预训练语言表示的方法,在大量文本语料(维基百科)上训练了一个通用的"语言理解"模型,然后用这个模型去执行想做的NLP ...

  6. C#大话设计模式学习总结

    如有雷同,不胜荣欣,如转载,请注明 C#大话设计模式学习总结 一.工厂模式 面向对象的三个特性:封装,继承和多态 1.封装 Class Operate { privatedouble _numberA ...

  7. visual studio各版本下载

    软件包括以下几种: cn_visual_studio_2010_ultimate_x86_dvd_532347.part1.rar cn_visual_studio_2010_ultimate_x86 ...

  8. Incorrect string value: '\xE8\x8B\x8F\xE6\x99\xA8...' for column 'user_name' at row 1

    前端插入数据的时候报如下错误: Incorrect string value: '\xE8\x8B\x8F\xE6\x99\xA8...' for column 'user_name' at row ...

  9. 线段树+离散化 POJ 2528 Mayor's posters

    题目传送门 题意:在一面墙上贴海报,有先后顺序,问最后有多少张不同的海报(指的是没被覆盖或者只是部分覆盖的海报) 分析:这题数据范围很大,直接搞超时+超内存,需要离散化:离散化简单的来说就是只取我们需 ...

  10. MySql数据基本操作sql语句

    表字段 1>插入数据insert 如果不插入id,让id自动增加 INSERT INTO `gpw_group`(group_code, group_parent_id, group_name, ...