1. 程式人生 > >Qt 之重啟應用程式

Qt 之重啟應用程式

簡介

今天分享的內容有些意思-如何重啟一個應用程式。其實,有時候這是一個很重要的功能點,而且很人性化、易用性很好。

例如:切換使用者。當某個使用者登入成功之後,需要切換到其它賬號,那麼這時,你就知道它的重要性了。

|

效果

這裡寫圖片描述

qApp退出程式碼重啟

定義退出程式碼

比較好的方式,在主視窗中定義一個靜態變數:

static int const EXIT_CODE_REBOOT;

並進行初始化:

int const Widget::EXIT_CODE_REBOOT = -123456789;

或者可以定義一個全域性變數或常量值。

重啟操作

接下來定義一個槽函式,裡面包含應用程式重啟的程式碼:

void Widget::reboot()
{
    qApp->exit(Widget::EXIT_CODE_REBOOT);
}

建立一個操作,將使用上面的槽來重啟程式。

QPushButton *pButton = new QPushButton(this);
pButton->setText(QStringLiteral("重啟"));
connect(pButton, SIGNAL(clicked(bool)), this, SLOT(reboot()));

修改應用程式迴圈

最後一步,修改應用程式的main函式來處理新的迴圈,將允許程式重啟:

int
main(int argc, char *argv[]) { int nExitCode = 0; do { QApplication a(argc, argv); Widget w; w.show(); nExitCode = a.exec(); } while(nExitCode == Widget::EXIT_CODE_REBOOT); return nExitCode; }

上面的方式介紹完了,還有一種更簡單的方式,使用QProcess啟動。

QProcess重啟

無需要定義重啟碼,也無需要修改應用程式迴圈。只需要一個簡單的槽函式即可。

定義一個槽函式,裡面包含應用程式重啟的程式碼:

void Widget::reboot()
{
    QString program = QApplication::applicationFilePath();
    QStringList arguments = QApplication::arguments();
    QString workingDirectory = QDir::currentPath();
    QProcess::startDetached(program, arguments, workingDirectory);
    QApplication::exit();
}

原始碼下載

相關推薦

QtQt應用程式【轉】

簡介 今天分享的內容有些意思-如何重啟一個應用程式。其實,有時候這是一個很重要的功能點,而且很人性化、易用性很好。 例如:切換使用者。當某個使用者登入成功之後,需要切換到其它賬號,那麼這時,你就知道它的重要性了。 效果 qApp退出程式碼重啟 定義退出程式碼 比較好的方式,在主視窗中定

Qt 應用程式

簡介 今天分享的內容有些意思-如何重啟一個應用程式。其實,有時候這是一個很重要的功能點,而且很人性化、易用性很好。 例如:切換使用者。當某個使用者登入成功之後,需要切換到其它賬號,那麼這時,你就知道它的重要性了。 | 效果 qApp退出程式碼

Android 應用程式 的兩種方式

/** * 重新啟動App -> 殺程序,會短暫黑屏,啟動慢 */ public void restartApp() { //啟動頁

Android中應用程式的幾種方法

1.  Intent intent = new Intent(this, Object.class); startActivity(intent); 2. 通過ActivityManager來重新啟動應用程式: ActivityManager manager = (Act

QT啟動應用程式的方法

標頭檔案:#include <QProcess>#include <QDir>實現:void Language_Setting::reboot() { QString p

全域性捕獲應用程式異常,並在出現異常狀態應用,保持錯誤日誌到手機

public class CrashHandler implements UncaughtExceptionHandler {       public static final String TAG = "CrashHandler";       private sta

Qt 復連接信號槽

style ref 重復 rtk doc svg cap http wls 059E2聘853F鉸http://t.docin.com/cufx6020 謔H戳桃桓51A判8w0芯http://t.docin.com/roj681 橙B3em刺灘姑0競eu奧0http:

Weblogic計劃任務腳本

tst critical erro dmi 環境 判斷 interval pro 僵屍進程 只需要在服務器上創建兩個文件即可:1、vim config.txt **** JAVA ***** AIX平臺的JAVA常為:/usr/java5/bin/java Linux平臺的

js陣列API(應用程式程式設計介面)

資料API是陣列原型中(Array.prototype.*)的陣列方法 1.新增元素    unshift() 方法(佇列方法) 新增到開頭,返回陣列的length     push()方法(棧方法)  arr.push(1

使用node-supervisor自動node程式

npm install -g supervisor 還需要把supervisor做一個軟連結到/usr/local/bin/下。 考慮到supervisor跟另一個系統常用的supevisor命令同名容易有衝突,顧只將node-supervisor軟連結過去。 軟連結的命令:

C# FrameworkAPIMutex實現應用程式單例

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace DemoCSDN {

替換某個class檔案 tomcat 程式沒反應

環境:linux  , tomcat7 , jdk1.7, spring 現象:單獨替換一個class , 重啟tomcat ,正常啟動,日誌不報錯;請求介面,日誌沒反應,介面返回404. 結論:替換的class 是1.8編譯的,與伺服器整體程式編輯jdk不一致。 檢查

QT 打包釋出Release應用程式

一、用windepolyqt.exe提取應用程式依賴.dll檔案 QT Creator release的.exe應用程式的執行需要依賴一些動態連結庫,如果在一臺沒有安裝QT的計算機上執行就需要打包動態庫拷貝過去才能執行。QT自帶有windeployqt.exe可執行程式可以

跨程序通訊AIDL-----不同應用程式之間跨程序

AIDL,通俗來說就是兩個Android應用要進行通訊,且不能通過網路雲伺服器的方式進行資料互動,只能呼叫本地函式庫的機制來實現,這時Android系統提供AIDL的機制來實現Android的跨程序通訊(使用者程序之間是相對封閉的,無法直接訪問資料)。 我們先不

Android 應用本身

public void restartApplication(Context context) { final Intent intent = context.getPackageManager().getLaunchIntentForPackage(c

Android外掛化開發AMS與應用程式(客戶端ActivityThread、Instrumentation、Activity)通訊模型分析

今天主要分析下ActivityManagerService(服務端) 與應用程式(客戶端)之間的通訊模型,在介紹這個通訊模型的基礎上,再    簡單介紹實現這個模型所需要資料型別。         本文所介紹內容基於android2.2版本。由於Android版本的不同

JAVA自身程式

,在使用java編寫重啟自身的程式時,本以為很簡單,但是發現沒有那麼順利 一般程式重啟方法:service xxxx restart 但java程式執行這個操作時,發現整個程式只能stop, 不能start 解決思路: 當時想的是,使用後臺命令執行ser

Qt: 多文件應用程式原始碼解析及下載

如果有程式碼看不懂,可以留言,我會回覆大家的留言(Qt、C++純技術交流群:302558294) 效果圖如下: 專案結構: 程式主要功能: 1、新建文字檔案。 2、多文件編輯文字檔案。 3、開啟已有檔案。 4、檔案另存為。 解析: 1、 Editor 類繼承自 Q

Android應用手機

重啟應用 private void restartApp() { final Intent intent = getPackageManager().getLaunchInte

線程池異常處理線程處理任務

啟動 環長 topic 過程 pre 設置 消費 execution 記錄 線程池異常處理之重啟線程處理任務 本文記錄一下在使用線程池過程中,如何處理 while(true)循環長期運行的任務,在業務處理邏輯中,如果拋出了運行時異常時怎樣重新提交任務。 這種情形在Kafka