QT程序的退出逻辑

发布于 2022-09-08 21:32:05 字数 1247 浏览 10 评论 0

程序有一个主窗口,在出窗口显示前有一个登陆窗口,登陆成功后显示主窗口,登陆失败退出程序,根据以往的编程经验,我使用了下面的实现方法:
main.cpp

int main(int argc, char *argv[]) {
QApplication a(argc, argv);
   MainWindow w;

w.login();

return a.exec();

}

MainWindow.cpp中的login过程和关闭是这样的

void MainWindow::login() {
Login l;
if (l.exec() == QDialog::Accepted) {

    l.hide();
     this->show();
} else {
   this->close();

}
}
void MainWindow::closeEvent(QCloseEvent *event) {

event->accept();

}

感觉逻辑上很正确,就是登陆不成功,窗口都退出了,进程依然在内存中运行,使用用qApp->quit();也不能使进程结束。翻阅资料才明白,l.exec() 是模态对话框,在执行退出程序的close quit等函数时,a.exec()还没有执行,事件循环还没有建立,所有退出事件都不起作用。最后用了这样的机制才达到如期目的:

main函数不变化

login变成:

MainWindow::~MainWindow() {
delete l;
}
void MainWindow::login(){
l->show();
}
void MainWindow::loginFinshed(bool ok){//login发射loginFinshed信号
if(ok){
   l->hide();
     this->show();
}else{
   qApp->quit();
}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文