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
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
相关文章推荐
- Not a PNG filCommand copypng emitted errors but did not return a nonzero exit code to indicate failu
- Spring之AOP奇葩报错:Null return value from advice does not match primitive return type for
- Office application does not quit after automation from Visual Studio .NET client(从VS.NET客户端自动化后,Office应用程序不退出)
- but did not return a nonzero exit code to indicate failure
- 关于使用hive删除表时出现的return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException
- but does not contain a(n) armv7s slice:/ linker command failed with exit code 1
- npm ERR! code ENOLOCAL Could not install from "" as it does not contain a package.json file.解决
- aop.AopInvocationException: null return value from advice does not match primitive return type for
- Maven私有仓库: 发布release版本报错:Return code is: 400, ReasonPhrase: Repository does not allow upd ating assets: maven-releases.
- QA:Failed to deploy artifacts from/to snapshots XX Failed to transfer file Return code is: 405, ReasonPhrase:Method Not Allowed.
- copypng emitted errors but did not return a nonzero exit code to错误
- The idcode read from the device does not match the idcode in the bsdl File.
- Java 中执行Hive QL 语句时报return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
- copypng emitted errors but did not return a nonzero exit code to indicate failure
- iOS常见问题之 copypng emitted errors but did not return a nonzero exit code to
- Exit code from container executor initialization is : 24 ExitCodeException exitCode=24: Configuration file ../etc/hadoop/container-executor.cfg not found.
- copypng emitted errors but did not return a nonzero exit code to错误
- Application-identifier entitlement does not match问题的解决
- Qt int QApplication::exec() [static]
- The reference in the deployment does not match the identity defined in the application manifest..