QT之QApplication的exit,quit调用后仍然显示窗口

首先,说说这两个函数的作用。两个函数都用于退出应用程序,而差别在于,exit是可以带一个参数的,可以设置退出标志,而quit相当于调用exit(0)。
然而,我发现进行如下的调用之后,却没有退出程序。

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LoginDialog dlg;
dlg.exec();
if(dlg.GetLogState()== false)
QApplication::exit();
MainWindow w;
w.show();
//w.close();
return a.exec();
}


程序中我先弹出一个登录框,然后获取登录状态,如果是登录失败,则退出程序,否则显示主界面。运行后发现即使登录失败,主界面还是显示出来。经过查看qt的文档,我发现问题应该是出在了在a.exec()之前使用事件有关。exec开始时间循环,而在之前调用的对话框的事件循环不能处理到应用程序的quit事件。
当然,此处有一个最简单的解决办法,如果登录失败,则让main函数直接返回,而不要去构造显示主界面,也不要再开启应用程序的事件循环。而在事件循环开始后的其他地方,如主界面中可以点击退出按钮来退出等,则可以调用QApplication::exit(0)或者quit来退出。
终结起来一句话,在开启事件循环之前,对exit和quit的调用都是无效的,会被忽略掉。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,关闭窗口并结束程序可以通过以下几种方式实现: 1. 使用close()函数:在Qt中,每个窗口都有一个close()函数,调用该函数可以关闭当前窗口。如果该窗口是应用程序的主窗口,则关闭主窗口导致整个应用程序退出。 示例代码: ```cpp #include <QApplication> #include <QMainWindow> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow mainWindow; mainWindow.show(); return app.exec(); } ``` 在上述示例代码中,当用户关闭主窗口时,应用程序自动退出。 2. 使用QCoreApplicationquit()函数:QCoreApplicationQt中的核心应用程序类,它提供了一些与应用程序控制相关的函数。其中,quit()函数可以用于退出应用程序。 示例代码: ```cpp #include <QApplication> #include <QMainWindow> #include <QAction> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow mainWindow; QAction *exitAction = new QAction("Exit", &mainWindow); QObject::connect(exitAction, &QAction::triggered, &app, &QCoreApplication::quit); mainWindow.menuBar()->addAction(exitAction); mainWindow.show(); return app.exec(); } ``` 在上述示例代码中,创建了一个菜单栏,并添加了一个"Exit"菜单项。当用户点击"Exit"菜单项时,触发exitAction的triggered信号,从而调用QCoreApplicationquit()函数退出应用程序。 3. 使用QApplicationquit()函数:QApplication类继承自QCoreApplication,它提供了一些与GUI相关的函数。其中,quit()函数可以用于退出应用程序。 示例代码: ```cpp #include <QApplication> #include <QMainWindow> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow mainWindow; QPushButton *exitButton = new QPushButton("Exit", &mainWindow); QObject::connect(exitButton, &QPushButton::clicked, &app, &QApplication::quit); mainWindow.setCentralWidget(exitButton); mainWindow.show(); return app.exec(); } ``` 在上述示例代码中,创建了一个主窗口,并添加了一个"Exit"按钮。当用户点击"Exit"按钮时,触发exitButton的clicked信号,从而调用QApplicationquit()函数退出应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值