关于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;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值