您的位置:首页 > 编程语言 > Qt开发

Qt应用程序自动重启(零零散散)

2016-04-16 16:25 489 查看
老有人问如何让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


上班了,就写到这儿...

FROM:  http://blog.csdn.net/dbzhang800/article/details/6906743
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: