Qt应用程序自动重启

  • 老有人问如何让Qt的应用程序自动重启,稍微写一点,也顺便理理自己的思路 2011.10.26

    自动重启,也就是退出当前进程,启动一个新的进程。于是,先看程序如何退出

    退出

    Qt程序的一般结构如下:

    int main(int argc, char** argv)
    {
        QApplication app(argc, argv);
        Widget w;
        w.show()
        return app.exec();
    }

    最后一句启动了主线程的事件循环。而要退出程序,就是要退出这个事件循环,使main函数返回。

    如何退出?

    正确方式:

    • QCoreApplication::exit(int);

    它还有一个马甲

    • QCoreApplication::quit();

    对于QApplication来说,它有一个常用的属性

    quitOnLastWindowClosed

    所以,当最后一个窗口关闭时,它可以自动调用前面的exit()

    而至于关闭窗口呢,我们还可以使用

    • QApplication::closeAllWindows()

    注:一般来说,对于多个窗口的程序,调用这个会比直接调用quit要好。因为这样窗口可以接受到Close事件。

    启动外部程序

    在Qt中,做这个工作的非QProcess莫属了,要启动当前程序的另一个进程,有要使二者没有"父子"关系。恩

    QProcess::startDetached(qApp->applicationFilePath(), QStringList());

    可是,为什么不写成下面这样?

    QProcess::startDetached(qApp->applicationFilePath());

    当然,如果路径中不包含空格,这个也可以工作。

    重新启动1

    现在简单了,要重新启动,只需要调用

    void XXX::onXXX() {
        qApp->quit();
        QProcess::startDetached(qApp->applicationFilePath(), QStringList());
    }

    或者:

    void XXX::onXXX() {
        qApp->closeAllWindow();
        QProcess::startDetached(qApp->applicationFilePath(), QStringList());
    }

    重新启动2

    尽管没什么好处,但有时候,我似乎更喜欢这样写:

    void XXX::onXXX() {
        qApp->exit(773)
    }

    然后main函数改成

    int main(int argc, char** argv)
    {
    ....
        int ret = app.exec();
        if (ret == 773) {
            QProcess::startDetached(qApp->applicationFilePath(), QStringList());
            return 0;
        }
        return ret;
    }

    这里面我用了一个魔数:773,没什么特别含义,只是因为我觉得

    773 = 'r'+'e'+'s'+'t'+'a'+'r'+'t' 
    ==>restart
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值