网上许多文章介绍说,qApp->quit()可以直接退出Qt程序。我最开始的理解是:当程序运行到这句代码时,就会立即退出exe程序,后来发现根本没有效果。
经过反复实验后,特得出以下结论(以下结论基于Qt4.8.7+vs2008中的运行,其他Qt版本应该兼容且适用):
1、qApp->quit/exit(0);执行后,程序仍会毫无阻拦的执行下去,与正常运行几乎无不同之处。
2、目前发现的一个不同点在于:执行这句代码后,后续的程序中若有QMessageBox类的弹出窗口要弹出,此时都会一闪而过,即不再阻塞程序来接收用户的反馈,而是无操作后直接消失,继续执行接下来的代码。
3、当quit()之后顺序自动执行的代码都执行完毕,重新回到exec()的事件循环中(即开始等待用户事件,自定义的while循环等不算)时,qApp->quit/exit(0)才会发挥关闭程序的作用,中断事件循环,退出程序。
4、因此,若想qApp->quit()语句发挥作用,应尽快回到事件循环中。常用的办法是,与 return; 配合使用,直接退出当前函数,回到事件循环中去。
注意:
该语句的执行必须发生在exec()事件循环启动之后,即先有“鸡”(事件循环启动),才能有“蛋”(中断事件循环)。否则,语句无效。