有時候寫的程式在運作中有時候出現問題,期望能夠通過重新開機來解決,但是在我們的qt中并沒有内置實作這樣功能的接口,這就不得不需要自己實作。
重新開機,無非就是關閉目前應用程式,然後再啟動一個新的程序執行目前應用程式
目前常用的有兩種方式實作重新開機
方法
描述
程序控制
退出目前程序,再通過qprocess啟動一個新的程序
事件循環
退出應用程式,然後通過application事件循環控制程式啟動
首先來看qt程式如何退出
qt程式的一般結構如下:
1
2
3
4
5
6
7
最後一句啟動了主線程的事件循環。而要退出程式,就是要退出這個事件循環,使main函數傳回。
是以退出應用程式就需要退出應用程式qapplication
退出的方法簡單來說有兩種,我們分别來說
一般來說,正确的退出方式如下
還有另外一個馬甲
我們可以很容易在官方的幫助文檔中,找到quit和exit之間的差別和聯系
對于qapplication來說,它有一個常用的屬性<code>quitonlastwindowclosed</code> 預設是<code>true</code>,是以,當最後一個視窗關閉時,它可以自動調用前面的exit()
是以關閉程式我們隻需要關閉所有程式,并且保證<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的gui進入了事件循環,并且傳回了程式exit的值,
是以我們可以在這個地方做些手腳。
最簡單的辦法,就是建立一個循環,當函數正常退出時,不做處理,而程式期望程式時,傳回一個我們可以識别的exit_code,并且不真正退出,而是重新啟動一個新的窗體進入事件循環
盡管沒什麼好處,但有時候,我似乎更喜歡這樣寫:
然後main函數改成
轉載:http://blog.csdn.net/gatieme/article/details/50374563