咱们在做界面开发的时候, 通常点开软件弹出来的第一个窗口不是实际的操作界面, 而是登录界面, 这个登录界面一般都是一个Dialog 窗口, 我在做这个Dialog窗口舍弃了默认的标题栏, 使用了自己定义的标题栏, 这样一来只要按下 X 就调用QApplication::quit() , 但是我使用的是 dialog->exec() 阻塞函数 一直等着关闭这个dialog 窗口才会继续往下执行代码,
一下是伪代码;
int result = dialog->exec()
if (result == QDialog::Accepted) {
操作界面->show()
} else {
QApplication::quit();
}
return QApplication::exec();
但是程序虽然没有了界面, 但是在看任务管理器的时候, 它的后台程序还在运行
我先是调试了一下是不是走到了, QApplication::quit(), 确实走到了这个函数, 但是没有完全退出 我看了网上的解释, 在exec() 函数之前 调用QApplication::quit() 无效;
可以使用QTimer::singleShot()函数可以让他延时执行QApplication::quit() ;
int result = dialog->exec()
if (result == QDialog::Accepted) {
操作界面->show()
} else {
// 延时200毫秒去执行lambda表达式里的句子
QTime::singleShot(200, [] () {
QApplication::quit();
});
}
return QApplication::exec();
可以只在 把QApplication::exec 移入到result == QDialog::Accepted判断里执行
int result = dialog->exec()
if (result == QDialog::Accepted) {
操作界面->show()
return QApplication::exec();
} else {
QApplication::quit();
}
return 0;