Qt 實現程式重啟的兩種方法

2022-06-27 08:29:17 字數 1142 閱讀 2415

最近在寫乙個開源專案,需要實現乙個程式自動重啟的功能。嘗試了好幾種方式,效果均不太理想。

一開始的實現思路是,記為思路一吧。大概就是寫一些 shell 指令碼,然後在需要自動重啟的地方關閉當前程式,然後開乙個程序執行這個 shell 指令碼。

先來說一說這個關閉吧,主要的方法有:

// 進入主事件迴圈,並等待直到呼叫exit(),返回傳遞給值exit()。必須呼叫此函式來開始事件處理。主事件迴圈從視窗系統接收事件,並將事件分派給應用程式小部件。

// 告訴應用程式退出並返回**。呼叫此函式後,應用程式將離開主事件迴圈,並從呼叫返回至exec()。該exec()函式返回返回碼。如果事件迴圈未執行,則此功能不執行任何操作。

close();

// 關閉多個視窗,比呼叫quit好,因為視窗可以接受到 close 事件。

接著來說思路一:關閉之後,然後開乙個程序執行這個 shell 指令碼。發現舊應用沒有自動關閉,並且也啟動了新應用,關閉舊應用發現新應用也同時關閉。之後分析原因之後發現,因為使用的是 python 的 multiprocessing 模組提供的乙個process類來代表乙個程序,此時新舊應用兩個之間是存在父子關係的,所以才會造成這種結果。

走了上面的坑了後,檢視官方文件可以知道,qt 中常用的實現重啟的方式有兩種:

def restart_real_live():

""" 程序控制實現自動重啟

:return:

"""# qprocess 類的作用是啟動乙個外部的程式並與之互動,並且沒有父子關係。

p = qprocess

def restart_real_live():

""" 事件迴圈實現自動重啟

:return:

"""if __name__=="__main__":

current_exit_code = 1207

while current_exit_code == 1207:

main_window = mainwindow()

main_window.show()

run_state_mgr()

main_window = none

官方文件還是要細品呀!

Qt處理批量訊號的兩種方法

二,使用qobject qobject sender class mainwin public qwidget mainwin mainwin qstringlist texts,qwidget parent qwidget parent connect signal const qstring t...

邊緣檢測 兩種方法實現

import cv2 import numpy from scipy import ndimage def strokeedges src,dst,blurksize,edgeksize src numpy.array src yuansrc src dst numpy.array dst if b...

兩種方法實現解除安裝apk應用程式

安裝和解除安裝可以通過intent呼叫系統自身的程式安裝和解除安裝程式來實現,另外,我們也可以直接呼叫android的安裝和解除安裝程式介面來實現。方法一 uri packageuri uri.parse package packagename 這個形式是 package 程式完整的路徑 包名 程式...