天天看点

QT之QApplication的exit,quit调用后仍然显示窗口

首先,说说这两个函数的作用。两个函数都用于退出应用程序,而差别在于,exit是可以带一个参数的,可以设置退出标志,而quit相当于调用exit(0)。
然而,我发现进行如下的调用之后,却没有退出程序。
           

int main(int argc, char *argv[]) { QApplication a(argc, argv); LoginDialog dlg; dlg.exec(); if(dlg.GetLogState()== false) QApplication::exit(); MainWindow w; w.show(); //w.close(); return a.exec(); }

程序中我先弹出一个登录框,然后获取登录状态,如果是登录失败,则退出程序,否则显示主界面。运行后发现即使登录失败,主界面还是显示出来。经过查看qt的文档,我发现问题应该是出在了在a.exec()之前使用事件有关。exec开始时间循环,而在之前调用的对话框的事件循环不能处理到应用程序的quit事件。

当然,此处有一个最简单的解决办法,如果登录失败,则让main函数直接返回,而不要去构造显示主界面,也不要再开启应用程序的事件循环。而在事件循环开始后的其他地方,如主界面中可以点击退出按钮来退出等,则可以调用QApplication::exit(0)或者quit来退出。

终结起来一句话,在开启事件循环之前,对exit和quit的调用都是无效的,会被忽略掉。

继续阅读