您的位置:首页 > 移动开发

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

2017-12-11 16:41 501 查看
概念理解不透侧导致,我们先看这两个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐