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

任何一个使用Qt的图形界面的程序,都都必须有一个QApplication对象,而且只能有一个。

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

1、使用用户的桌面设置,例如palette()、font()和doubleClickInterval()来初始化应用程序。如果用户改变全局桌面,例如通过一些控制面板,它会对这些属性保持跟踪。
2、执行事件处理,也就是说它从低下的窗口系统接收事件并且把它们分派给相关的窗口部件。通过使用sendEvent()和postEvent(),你可以发送你自己的事件到窗口部件。
3、分析命令行参数并且根据它们设置内部状态。关于这点的详细情况请参考下面的构造函数文档。
4、定义由QStyle对象封装的应用程序的观感。在运行状态下,可以通过setStyle()来改变。
5、指定应用程序如何分配颜色。
7、定义默认文本编码并且提供通过translate()用户可见的本地化字符串。
8、提供一些像desktop()和clipboard()这样的魔术般的对象。
9、它知道应用程序的窗口。你可以使用widgetAt()来询问在一个确定点上存在哪个窗口部件,得到一个topLevelWidgets()(顶级窗口部件)的列表和通过closeAllWindows()来关闭所有窗口,等等。
10、管理应用程序的鼠标光标处理。

11、它提供复杂的对话管理支持。这使得当用户注销时,它可以让应用程序很好地结束,如果无法终止,撤消关闭进程并且甚至为未来的对话保留整个应用程序的状态。

常用的几个方法:
1、 int QCoreApplication::exec ():启动程序,进入消息循环;
2、 QCoreApplication::exit ( int returnCode = 0 ):终止消息循环,退出程序;
3、QString QCoreApplication::applicationDirPath ():返回应用程序的路径,不包含最后的“\”;
4、void QCoreApplication::addLibraryPath ( const QString & path ):设置一个库的优先搜索路径;
5、QString QCoreApplication::applicationFilePath ():返回应用程序的全路径名;
6、qint64 QCoreApplication::applicationPid ():返回应用程序的进程ID;
7、void QCoreApplication::postEvent ( QObject * receiver, QEvent * event ):将事件发送到队列并立即返回;
8、bool QCoreApplication::sendEvent ( QObject * receiver, QEvent * event ):发送事件到队列,并等待返回结果;

9、 void QCoreApplication::sendPostedEvents ( QObject * receiver, int event_type ):立即分派事件队列中先前由portEevent发送的事件;
10、 void QCoreApplication::processEvents ( QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents ):立即分派事件队列中flags指定的事件,直到没有事件可处理;
11、QString QCoreApplication::translate ( const char * context, const char * sourceText, const char * disambiguation, Encoding encoding, Encoding encoding = CodecForTr ):通过查询安装的消息文件,返回sourceText的翻译文本,如果安装文件不包含它则返回“sourceText”。context通常是一个类名(例如,“MyDialog”)并且sourceText是英语文本或者一个短的标识文本,如果输出文本很长可以通过一个短的名称查找到一个长的名称。

下面是一个简单的例子:

#include <QApplication>
#include <QWidget>
#include <QPushButton>

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QWidget MainWindow;
   MainWindow.setMinimumSize(200, 100);
   MainWindow.setMaximumSize(200, 100);

   QPushButton button("Hello, World", &MainWindow);
   button.setGeometry(20, 20, 160, 60);
   MainWindow.show();
   return a.exec();
}


运行结果: