标题:QT exit(0) quit() close 的问题?
作者:dafei2015
日期:2019-05-23 16:40
内容:
void MainWindow::on_BTN_exit_clicked()
{
exit(0);
// qApp->exit(0);
//close();
//qApp->quit();
}
程序界面有个按钮,另外程序里面有个循环读取的函数(checkbox控制),使用以下几个退出的函数有如下问题:
1.使用 qApp->exit(0)和qApp->quit()退出程序,如果循环一直在执行,界面不会关闭,当我停止循环(checkbox设false),界面才关闭,程序退出
2.使用close()只是关闭界面,如果循环在执行,程序后台还是在运行
3.使用exit(0)才能解决问题
所有我想问下exit(0)和qApp->exit(0)是什么区别,以及为啥会这样呢?
#1 [fsu0413 05-23 20:40]
循环是怎么循环的?
原因是标准库里的exit不返回直接退出,而QApplication::exit()是返回的,需要等到程序回到消息循环再退出
QApplication::quit == QApplication::exit(0)
QMainWindow::close 只关闭窗口,如果所有窗口都关闭了则由Qt框架调用QApplication::exit(0),所以本质上也是QApplication::exit
#2 回 fsu0413 的帖子 [dafei2015 05-23 22:25]
fsu0413:循环是怎么循环的?
原因是标准库里的exit不返回直接退出,而QApplication::exit()是返回的,需要等到程序回到消息循环再退出
QApplication::quit == QApplication::exit(0)
QMainWindow::close 只关闭窗口,如果所有窗口都关闭了则由Qt框架调用QApplication::exit(0),所以本质 .. (2019-05-23 20:40)
exit(0)是暴力退出
#3 [20091001753 05-24 08:47]
补充一下:
QGuiApplication 的默认策略就是,楼上提到的,所有窗口退出后,Qt 框架会自动调用QApplication::exit
可以通过 quitOnLastWindowClosed false 修改。
而 QApplication 因为没有窗口,所以需要你手动 QApplication::exit
但是在编程实践中,因为第三方库的质量问题,造成的程序无法正常退出,还是需要用到暴力的 exit