天天看點

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

繼續閱讀