Qt应用程序自动重启
来源:互联网 发布:优化电源方案是什么 编辑:程序博客网 时间:2024/05/22 07:40
- 以下文章转载自dbzhang800的博客,因为一直在琢磨这个问题,所以先收藏学习。
- 老有人问如何让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
上班了,就写到这儿...
原文地址:http://blog.csdn.net/dbzhang800/article/details/6906743
另一篇英文的文章:
<How to make an Application restartable>
http://wiki.qt.io/How_to_make_an_Application_restartable
0 0
- Qt应用程序自动重启
- Qt应用程序自动重启
- Qt应用程序自动重启
- QT 应用程序自动重启
- Qt应用程序自动重启(零零散散)
- Qt应用程序自动重启(零零散散)
- Qt之重启应用程序
- QT实现应用程序重启
- 【Qt】Qt之重启应用程序【转】
- Qt 中程序自动重启
- Qt程序自动重启的实现
- adb 重启应用程序
- C# 重启应用程序
- 开发板开机自动运行QT应用程序
- IIS自动停止,iis自动关闭。应用程序池假死、自动重启以及iis权限等解决办法
- IIS自动停止,iis自动关闭。应用程序池假死、自动重启以及iis权限等解决办法
- IIS自动停止,iis自动关闭。应用程序池假死、自动重启以及iis权限等解决办法
- IIS自动停止,iis自动关闭。应用程序池假死、自动重启以及iis权限等解决办法
- 各种排序算法时间复杂度
- 低功耗蓝牙的基础
- Source Insight 3.X utf8支持插件
- cookie相关
- Partition List
- Qt应用程序自动重启
- java.lang.NoClassDefFoundError: Could not initialize class com.zzxgy.struts.model.HibernateUtil
- 一个朋友给他们公司软件产品写的使用说明。。。我惊呆了。。
- pojo与DTO的区别
- CentOS配置smaba与Windows共享文件
- STL vector总结(六)Others(39)
- 数的计算
- hdu 分类
- select into from 和 insert into from 的区别