今天分享的內容有些意思-如何重啓一個應用程序。其實,有時候這是一個很重要的功能點,並且很人性化、易用性很好。markdown
例如:切換用戶。當某個用戶登陸成功以後,須要切換到其它帳號,那麼這時,你就知道它的重要性了。app
比較好的方式,在主窗口中定義一個靜態變量:函數
static int const EXIT_CODE_REBOOT;
this
並進行初始化:spa
int const Widget::EXIT_CODE_REBOOT = -123456789;
.net
或者能夠定義一個全局變量或常量值。code
接下來定義一個槽函數,裏面包含應用程序重啓的代碼:blog
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函數來處理新的循環,將容許程序重啓:get
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啓動。
無須要定義重啓碼,也無須要修改應用程序循環。只須要一個簡單的槽函數便可。
定義一個槽函數,裏面包含應用程序重啓的代碼:
void Widget::reboot()
{
QString program = QApplication::applicationFilePath();
QStringList arguments = QApplication::arguments();
QString workingDirectory = QDir::currentPath();
QProcess::startDetached(program, arguments, workingDirectory);
QApplication::exit();
}
原文做者:一去丶二三裏
做者博客:去做者博客空間