Qt::Application::exec does not return exit code from Qt::Application::exit

版权声明:本文为博主原创文章,未经博主允许不得转载。转载请注明出处:http://blog.csdn.net/neuq_jtxw007 https://blog.csdn.net/neuq_jtxw007/article/details/78774147

概念理解不透侧导致,我们先看这两个API在Qt中的含义:

  • void QApplication::exit ( int retcode = 0 ) [静态]
      告诉应用程序退出,伴随一个返回代码。在这个函数被调用之后,应用程序离开主事件循环并且从exec()调用之后返回。exec()函数返回retcode。根据习惯,为0的retcode意味着成功,并且任何非零的值意味着错误。注意与同名的C库函数不同,这个函数返回到调用者——它的事件处理结束。

  • int QApplication::exec ()
      进入主事件循环并且等待,直到exit()被调用或者主窗口部件被销毁,并且返回值被设置为exit()(如果通过quit()调用exit(),retcode为0)。需要调用这个函数来开始事件处理。主事件循环从窗口系统中接收事件并且把它们分派给应用程序窗口部件。通常来说,在调用exec()之前,没有用户交互可以发生。作为一个特例,像QMessageBox这样的模式对话框可以在调用exec()之前使用,因为模式对话框调用exec()来开始本地事件循环。为了使你的应用程序执行空闲处理,例如,只要没有未处理地事件,执行一个特殊的函数,使用QTimer,0超时。更高级的空闲处理方案可以使用processEvents()来完成。

问题关键点的一句话:If the event loop is not running, this function does nothing.
意思就是,如果exit()没有在循环事件中,则exit()函数什么都不会做。也就是你需要用一个线程或者信号来触发这个exit(),而函数构造的时候不应该执行exit(),即使执行了,也是在主事件循环等待之前,是不会将结果返回给exec()的。

参考资料:http://www.qtcentre.org/threads/19706-Exiting-a-Qt-Console-Application
https://forum.qt.io/topic/36208/solved-console-application-does-not-exit

猜你喜欢

转载自blog.csdn.net/neuq_jtxw007/article/details/78774147