Qt应用程序自动重启(零零散散)
2016-04-16 16:25
489 查看
老有人问如何让Qt的应用程序自动重启,稍微写一点,也顺便理理自己的思路 2011.10.26
自动重启,也就是退出当前进程,启动一个新的进程。于是,先看程序如何退出
Qt程序的一般结构如下:
最后一句启动了主线程的事件循环。而要退出程序,就是要退出这个事件循环,使main函数返回。
正确方式:
QCoreApplication::exit(int);
它还有一个马甲
QCoreApplication::quit();
对于QApplication来说,它有一个常用的属性
所以,当最后一个窗口关闭时,它可以自动调用前面的exit()
而至于关闭窗口呢,我们还可以使用
QApplication::closeAllWindows()
注:一般来说,对于多个窗口的程序,调用这个会比直接调用quit要好。因为这样窗口可以接受到Close事件。
在Qt中,做这个工作的非QProcess莫属了,要启动当前程序的另一个进程,有要使二者没有"父子"关系。恩
可是,为什么不写成下面这样?
当然,如果路径中不包含空格,这个也可以工作。
现在简单了,要重新启动,只需要调用
或者:
尽管没什么好处,但有时候,我似乎更喜欢这样写:
然后main函数改成
这里面我用了一个魔数:773,没什么特别含义,只是因为我觉得
上班了,就写到这儿...
FROM: http://blog.csdn.net/dbzhang800/article/details/6906743
自动重启,也就是退出当前进程,启动一个新的进程。于是,先看程序如何退出
退出
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
相关文章推荐
- 关于QtGraphics编程的几点经验总结_qgraphicsscene
- ubuntu 15 安装Qt
- 基于QT和OpenCV的人脸检測识别系统(1)
- QT中QProcess调用命令行的痛苦经历
- Qt信号与槽机制1
- SeimiAgent——基于QtWebkit的通用网页渲染代理服务
- 让QT跑在ARM开发板上
- qt坐标系统与布局的简单入门
- QT 连接数据库的详细步骤
- [解决方案] Ubuntu 16.04 下 Qt 5.6 无法输入中文的问题
- 向Tiny6410移植QT4.7.0版本
- qt输入框
- QT中的OpcDa 客户端 实现
- qt入门
- qt3d中基于opengles编写shader
- 【QT】:QT中信号与槽详解
- 【QT】:QT实现关联和解决关联
- QT入门:怎么写无边框(标题栏)的窗口、透明窗口、圆角控件
- QT中的插件
- 【QT】:QT实现一个信号与多个槽的关联和实现多个信号与一个槽的关联