Qt 中程序自动重启
2016-07-01 00:56
781 查看
参照至 dbzhang老师的博文,记录于此.......
要想理解重启,先得看看Qt程序怎么退出!
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
int main(int argc, char** argv)
{
QApplication a(argc, argv);
Widget w;
w.show()
return a.exec();
}
最后一句启动了主线程的事件循环。而要退出程序,就是要退出这个事件循环,使main函数返回。
如何退出?
正确方式:
[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
QCoreApplication::exit(int);
它还有一个马甲
[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
QCoreApplication::quit();
对于QApplication来说,它有一个常用的属性:quitOnLastWindowClosed
所以,当最后一个窗口关闭时,它可以自动调用前面的exit(),而至于关闭窗口呢,我们还可以使用
[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
//一般来说,对于多个窗口的程序,调用这个会比直接调用quit要好。因为这样窗口可以接受到Close事件。
QApplication::closeAllWindows();
[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
下面这行代码也可以,如果路径中不包含空格,这个也可以工作
[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
QProcess::startDetached(qApp->applicationFilePath());
[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
void XXX::onXXX()
{
qApp->quit();
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
}
http://blog.csdn.net/ac_huang/article/details/37995315
要想理解重启,先得看看Qt程序怎么退出!
1、退出
[cpp] view plain copy![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
int main(int argc, char** argv)
{
QApplication a(argc, argv);
Widget w;
w.show()
return a.exec();
}
最后一句启动了主线程的事件循环。而要退出程序,就是要退出这个事件循环,使main函数返回。
如何退出?
正确方式:
[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
QCoreApplication::exit(int);
它还有一个马甲
[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
QCoreApplication::quit();
对于QApplication来说,它有一个常用的属性:quitOnLastWindowClosed
所以,当最后一个窗口关闭时,它可以自动调用前面的exit(),而至于关闭窗口呢,我们还可以使用
[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
//一般来说,对于多个窗口的程序,调用这个会比直接调用quit要好。因为这样窗口可以接受到Close事件。
QApplication::closeAllWindows();
2、启动外部程序
在Qt中,做这个工作的非QProcess莫属了,要启动当前程序的另一个进程,有要使二者没有"父子"关系。[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
下面这行代码也可以,如果路径中不包含空格,这个也可以工作
[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
QProcess::startDetached(qApp->applicationFilePath());
3、重启
有了上面的分析,下面的代码就简单,好理解了[cpp] view plain copy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
void XXX::onXXX()
{
qApp->quit();
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
}
http://blog.csdn.net/ac_huang/article/details/37995315
相关文章推荐
- Qt编程之信号和槽
- 基于Qt的轨迹还原之三:代码实现与测试
- 使用VS2010开发Qt程序的一点经验(转载)
- Qt学习笔记1
- QT里面 出现exited with code 255
- 基于Qt的轨迹还原之二:用QGLWidget实现功能
- Qt Creator常用快捷键汇总
- yocto imx6 qt5开发里坑
- Qt数制问题
- Qt Creator stylesheet 简单应用
- pyqt5 笔记(三)py2exe 实现代码打包exe
- QT对话框实现
- Qt学习十:日历组件
- 图像缩放实现(Qt)
- QT枚举类型与字符串类型相互转换
- pyqt5 笔记(二)实现http请求发送
- 树莓派----03_安装QT5
- Qt之QTimer
- Qt之QTimer
- QT 编译动态DLL及使用