关于退出Qt程序的问题

本文介绍了Qt程序如何优雅地处理用户退出操作,包括在closeEvent中添加确认提示,正确使用qApp->quit()和qApp->exit(0)确保程序关闭,以及在特定场景下如何在构造函数中实现程序退出。同时,讨论了隐藏主窗口实现无界面退出的情况,确保程序在启动时能根据条件立即退出并给出相应提示。
摘要由CSDN通过智能技术生成

很多时候,软件的退出要向用户询问,以一个弹窗的形式让用户来选择是误点了“关闭”按钮,还是正真的想要退出。

对Qt程序来说,一般的思路是将退出提示的逻辑写到,窗口的虚函数:

void closeEvent(QCloseEvent *event) override;

但要注意的是:很多情况下,调用close()函数是无法结束应用程序的,它只能关闭窗口。调用close()后你还需要调用:

qApp->quit();

或者是:

qApp->exit(0);

qApp->quit()和qApp()->exit(0);
写在构造函数的里是没有效果的,你只能在程序初始化工作做完之后再来使用这些操作。

如果你确实需要在构造函数里加入退出程序的逻辑,有个简单的办法是使用定时器:

    QTimer *myTimer = new QTimer();
    myTimer->start(100);
    connect(myTimer, &QTimer::timeout, this, [=](){this->close(); qApp->quit();});

在实际项目里还有一种情况是,程序启动的一开始就要退出,并且此时一般要求不显示主界面。比如说当程序已经启动时,再次启动就会弹窗提示,然后结束程序,或者该程序启动时必须连接某项服务,连不上就不能进行业务。
以上情况一般时要求弹框提示,不出现主界面,然后软件退出。
这时候只需要在退出的逻辑中将主窗口隐藏。

myWidget->setVisible(false);

提示:使用qApp需要包含头文件QApplication或QCoreApplication

一个简单的退出提示小例子:

void MainWindow::closeEvent(QCloseEvent *event)
{
    if(QMessageBox::information(this, "提示","确定要退出吗?", QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
    {
        event->accept();
        qApp->quit();
    }
    else
    {
        event->ignore();
    }
}

qApp是一个宏,从这个宏我们可以看到,QCoreApplication有个单例函数
在这里插入图片描述

在这里插入图片描述
可以获取到一个指向应用程序的全局指针。
看到这里就能发现,这个全局指针,我也可以不用宏,自己去拿。

    QCoreApplication *myAppInstance = QCoreApplication::instance();
    myAppInstance = (QApplication *)myAppInstance;
    myAppInstance->quit();
  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆的菜菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值