Qt 之 QApplication
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的更多相关文章
- [QT]给QApplication安装事件过滤器 app.installEventFilter
Qt的事件处理有5种级别: 1. 重写控件的事件处理函数:如重写keyPressEvent(),mousePressEvent()和paintEvent(),这是最常用的事件处理方法,我们已 ...
- QT 入门 -QApplication QPushButton QDialog Ui类型的手工使用
QT 1.工具 assistant 帮助文档 qtconfig QT配置工具 qmake QT的make与项目文件智能创建工具 uic UI界面的设计文件的编译工具 mo ...
- 【QT】QApplication简介
1.QApplication QApplication类管理GUI程序的控制流和主要设置,是基于QWidget的,为此特化了QGuiApplication的一些功能,处理QWidget特有的初始化和结 ...
- Qt 模拟鼠标点击(QApplication::sendEvent(ui->pushbutton, &event0);)
QPoint pos(0,0);QMouseEvent event0(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt ...
- (转)Qt中文手册 之 QApplication
QApplication管理GUI程序的控制流和主要设置. QApplication包含由窗口系统和其他来源处理过和发送过的主事件循环.它也处理应用程序的初始化和收尾工作,并提供对话管理.QAppli ...
- Qt实用小技巧(转)
原博网址:http://www.cnblogs.com/feiyangqingyun/archive/2010/12/06/1898143.html 1.如果在窗体关闭前自行判断是否可关闭答:重新实现 ...
- Qt之加载QSS文件
简述 Qt中关于样式的使用很常见,为了降低耦合性(与逻辑代码分离),我们通常会定义一个QSS文件,然后编写各种部件(例如:QLable.QLineEdit.QPushButton)的样式,最后使用QA ...
- Qt事件处理机制
研一的时候开始使用Qt,感觉用Qt开发图形界面比MFC的一套框架来方便的多.后来由于项目的需要,也没有再接触Qt了.现在要重新拾起来,于是要从基础学起. Now,开始学习Qt事件处理机制. 先给出原文 ...
- 【转】解读Qt 事件处理机制(上篇)
[转自]:http://mobile.51cto.com/symbian-272812.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生 ...
随机推荐
- OrChard快速开发一个网站,个人网站
Orchard中文 登录 主页 文档 下载 博客文章 论坛 联系我们 Orchard是一个以微软为主导的开源CMS项目,它允许使用者在Asp.Net平台上快速建立网站,并且提供扩展框架能够允许定制人员 ...
- 【旧文章搬运】获取并修改PEB中的映像路径,命令行和当前目录
原文发表于百度空间,2008-7-24 当时对UNICODE_STRING的使用还有点问题,导致最终效果图中字符串被截断了======================================= ...
- 【华为2016上机试题C++】最高分是多少
[编程题] 最高分是多少 时间限制:1秒 空间限制:65536K 老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. 输入描述: 输入包括 ...
- E20170405-gg
repository n. 存储库,知识库 Permanent adj 永久的 host n 主机,住处人,主人 authenticate v 使生效,验证 shell n 外壳 commi ...
- BERT的几个可能的应用
BERT是谷歌公司于2018年11月发布的一款新模型,它一种预训练语言表示的方法,在大量文本语料(维基百科)上训练了一个通用的"语言理解"模型,然后用这个模型去执行想做的NLP ...
- C#大话设计模式学习总结
如有雷同,不胜荣欣,如转载,请注明 C#大话设计模式学习总结 一.工厂模式 面向对象的三个特性:封装,继承和多态 1.封装 Class Operate { privatedouble _numberA ...
- visual studio各版本下载
软件包括以下几种: cn_visual_studio_2010_ultimate_x86_dvd_532347.part1.rar cn_visual_studio_2010_ultimate_x86 ...
- 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 ...
- 线段树+离散化 POJ 2528 Mayor's posters
题目传送门 题意:在一面墙上贴海报,有先后顺序,问最后有多少张不同的海报(指的是没被覆盖或者只是部分覆盖的海报) 分析:这题数据范围很大,直接搞超时+超内存,需要离散化:离散化简单的来说就是只取我们需 ...
- MySql数据基本操作sql语句
表字段 1>插入数据insert 如果不插入id,让id自动增加 INSERT INTO `gpw_group`(group_code, group_parent_id, group_name, ...