簡介
今天分享的內容有些意思-如何重啟一個應用程式。其實,有時候這是一個很重要的功能點,而且很人性化、易用性很好。
例如:切換使用者。當某個使用者登入成功之後,需要切換到其它帳號,那麼這時,你就知道它的重要性了。
簡介 效果 qApp結束代碼重啟 定義結束代碼 重啟操作 修改應用程式迴圈 QProcess重啟 源碼下載
效果
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();}
源碼下載 Qt之重啟應用程式