天天看点

QT实现应用程序重启 示例程序 问题描述 实现重启的方法 使用进程控制实现重启 使用事件循环

QT实现应用程序重启 示例程序 问题描述 实现重启的方法 使用进程控制实现重启 使用事件循环

有时候写的程序在运行中有时候出现问题,期望能够通过重启来解决,但是在我们的qt中并没有内置实现这样功能的接口,这就不得不需要自己实现。

重启,无非就是关闭当前应用程序,然后再启动一个新的进程执行当前应用程序

目前常用的有两种方式实现重启

方法

描述

进程控制

退出当前进程,再通过qprocess启动一个新的进程

事件循环

退出应用程序,然后通过application事件循环控制程序启动

首先来看qt程序如何退出

qt程序的一般结构如下:

1

2

3

4

5

6

7

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

因此退出应用程序就需要退出应用程序qapplication

退出的方法简单来说有两种,我们分别来说

一般来说,正确的退出方式如下

还有另外一个马甲

我们可以很容易在官方的帮助文档中,找到quit和exit之间的区别和联系

QT实现应用程序重启 示例程序 问题描述 实现重启的方法 使用进程控制实现重启 使用事件循环

对于qapplication来说,它有一个常用的属性<code>quitonlastwindowclosed</code> 默认是<code>true</code>,所以,当最后一个窗口关闭时,它可以自动调用前面的exit()

QT实现应用程序重启 示例程序 问题描述 实现重启的方法 使用进程控制实现重启 使用事件循环

因此关闭程序我们只需要关闭所有程序,并且保证<code>quitonlastwindowclosed = true</code>即可.

因此我们还可以使用

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

在qt中, 可以使用qprocess::startdetached开启一个新的进程

要启动当前程序的另一个进程,有要使二者没有”父子”关系就可以使用qprocess

qprocess类的作用是启动一个外部的程序并与之交互。

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

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

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

自己观察前面的qt主函数,我们看到最后一行<code>a.exec();</code>

QT实现应用程序重启 示例程序 问题描述 实现重启的方法 使用进程控制实现重启 使用事件循环

这个函数使qt的gui进入了事件循环,并且返回了程序exit的值,

因此我们可以在这个地方做些手脚。

最简单的办法,就是创建一个循环,当函数正常退出时,不做处理,而程序期望程序时,返回一个我们可以识别的exit_code,并且不真正退出,而是重新启动一个新的窗体进入事件循环

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

然后main函数改成

转载:http://blog.csdn.net/gatieme/article/details/50374563

继续阅读