关于qt 中QApplicationquit () 无效的问题

关于qt 中QApplication::quit () 无效的问题

一. 问题描述

咱们在做界面开发的时候, 通常点开软件弹出来的第一个窗口不是实际的操作界面, 而是登录界面, 这个登录界面一般都是一个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;

你可能感兴趣的:(qt,qt,开发语言,c++,编程语言)