对于一个Widget程序,我们通常会看到下面的代码:
QApplication a(argc, argv);
...
return a.exec();
有过Win32程序开发经验的人都知道,在WinMain函数的最后有一个while循环来不断的接收消息和处理消息。我们大胆猜测Qt也使用了这种形式。那么这个循环可能出现的位置在a.exec()
中。通过调试Qt的源码,可以找到如下的调用过程:
int QApplication::exec()
{
return QGuiApplication::exec();
}
int QGuiApplication::exec()
{
...
return QCoreApplication::exec();
}
int QCoreApplication::exec()
{
...
QEventLoop eventLoop;
...
int returnCode = eventLoop.exec();
...
}
int QEventLoop::exec(ProcessEventsFlags flags)
{
...