• 5136阅读
  • 3回复

QT exit(0) quit() close 的问题? [复制链接]

上一主题 下一主题
离线dafei2015
 

只看楼主 倒序阅读 楼主  发表于: 2019-05-23
关键词: QTCreatorqt5widget
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)是什么区别,以及为啥会这样呢?
离线fsu0413

只看该作者 1楼 发表于: 2019-05-23
循环是怎么循环的?

原因是标准库里的exit不返回直接退出,而QApplication::exit()是返回的,需要等到程序回到消息循环再退出
QApplication::quit == QApplication::exit(0)
QMainWindow::close 只关闭窗口,如果所有窗口都关闭了则由Qt框架调用QApplication::exit(0),所以本质上也是QApplication::exit
4条评分好评度-1贡献值-1金钱+5威望-1
dafei2015 好评度 -1 - 2019-05-24
dafei2015 贡献值 -1 - 2019-05-24
dafei2015 威望 -1 - 2019-05-24
dafei2015 金钱 +5 - 2019-05-24
离线dafei2015

只看该作者 2楼 发表于: 2019-05-23
回 fsu0413 的帖子
fsu0413:循环是怎么循环的?
原因是标准库里的exit不返回直接退出,而QApplication::exit()是返回的,需要等到程序回到消息循环再退出
QApplication::quit == QApplication::exit(0)
QMainWindow::close 只关闭窗口,如果所有窗口都关闭了则由Qt框架调用QApplication::exit(0),所以本质 .. (2019-05-23 20:40) 

exit(0)是暴力退出
在线20091001753

只看该作者 3楼 发表于: 2019-05-24
补充一下:
QGuiApplication 的默认策略就是,楼上提到的,所有窗口退出后,Qt 框架会自动调用QApplication::exit
可以通过 quitOnLastWindowClosed false 修改。

而 QApplication 因为没有窗口,所以需要你手动 QApplication::exit
但是在编程实践中,因为第三方库的质量问题,造成的程序无法正常退出,还是需要用到暴力的 exit
1条评分金钱+5
dafei2015 金钱 +5 - 2019-05-24
(づ ̄ 3 ̄)づ
快速回复
限100 字节
 
上一个 下一个