QApplication类

只要包含头文件QApplication或者QCoreapplication,就用使用qApp,指向一个当前实例。查看源码发现qApp是个宏

QApplication中:#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))

QCoreapplication中:#define qApp QCoreApplication::instance()

所以可以肯定的是QCoreApplication有个静态函数instance()返回指向自己的指针。

定义程序唯一的实例时,初始化self指向自身。qApp是一个宏,替换后为调用相应的instance()。


QApplication类管理图形用户界面应用程序的控制流和主要设置。 可以说QApplication 是Qt的整个后台管理的命脉

它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。

对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。

QApplication对象是可以通过全局变量qApp访问。它的负责的主要范围有:

* 它使用用户的桌面设置,例如palette()、font()和doubleClickInterval()来初始化应用程序。如果用户改变全局桌面,例如通过一些控制面板,它会对这些属性保持跟踪。

 

* 它执行事件处理,也就是说它从低下的窗口系统接收事件并且把它们分派给相关的窗口部件。通过使用sendEvent()和postEvent(),你可以发送你自己的事件到窗口部件。

* 它分析命令行参数并且根据它们设置内部状态。关于这点的详细情况请参考下面的构造函数文档。

* 它定义了由QStyle对象封装的应用程序的观感。在运行状态下,可以通过setStyle()来改变。

* 它指定了应用程序如何分配颜色。详细情况请参考setColorSpec()。

* 它定义了默认文本编码(请参考setDefaultCodec())并且提供了通过translate()用户可见的本地化字符串。

* 它提供了一些像desktop()和clipboard()这样的魔术般的对象。

* 它知道应用程序的窗口。你可以使用widgetAt()来询问在一个确定点上存在哪个窗口部件,得到一个topLevelWidgets()(顶级窗口部件)的列表和通过closeAllWindows()来关闭所有窗口,等等。

* 它管理应用程序的鼠标光标处理,请参考setOverrideCursor()和setGlobalMouseTracking()。

* 在X窗口系统上,它提供刷新和同步通讯流的函数,请参考flushX()和syncX()。

* 它提供复杂的对话管理支持。这使得当用户注销时,它可以让应用程序很好地结束,如果无法终止,撤消关闭进程并且甚至为未来的对话保留整个应用程序的状态。详细情况请参考isSessionRestored()、sessionId()、commitData()和saveState()。

应用程序排演实例包含了一个QApplication通常用法的典型完整的main()。

因为QApplication对象做了如此多的初始化,它必须在所有与用户界面相关的其它类被创建之前被创建。

因为它也处理命令行参数,在应用程序中对argv解释和修改之前创建它通常是一个好主意。(注意,也对于X11,setMainWidget()可以根据-geometry选项来改变主窗口部件。为了保持这个功能,你必须在setMainWidget()和它的任何重载之前设置你的默认。)


关于事件的发送有两种方式:

1、bool QApplication::sendEvent ( QObject * receiver, QEvent * event ) [静态]
使用notify()函数直接发送事件event给接受者receiver。返回由事件处理器返回的值。
2. void  QApplication :: postEvent  (  QObject  * receiver, QEvent * event ) [静态]
把事件event添加为对象receiver的接收对象,把它添加到事件队列中并且立即返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值