所謂自動重啟就是程序自動關閉后在重新打開:
一般一個qt程序main函數如下:
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QWidget widget;
widget.resize(400, 400);
widget.show();
return app.exec();
}
一 . 關閉程序
widget 組建show()之后就進入應用程序的事件循環 app.exec(); 所以讓程序自動關閉就需要讓應用程序退出事件循環,怎樣退出呢? 有兩種方案,第一,直接用Qt自帶的全局變量qApp執行qApp->exit()或者qApp->quit(), 第二種方案是利用qt的一個自帶屬性,quitOnLastWindowClosed,就是當GUI最后一個窗口關閉時,GUI程序會發出一個最后窗口關閉的信號,應用程序接到這個信號后就准備做退出事件循環的操作。關閉所有窗口的辦法是 QApplication::closeAllWindows()
二. 重啟
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
所以根據以上思路就可以得到自動關閉重啟的代碼:
void xxxx:onRestart()
{
qApp->quit(); // 或者 aApp->closeAllWindows();
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
}
看到一種有意思的方法是在onRestart()中只做退出操作,然后在main函數中做重啟操作。
void xxx:onRestart()
{
qApp->exit(777);
}
然后main函數中:
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QWidget widget;
widget.resize(400, 400);
widget.show();
int e = app.exec();
if(e == 777)
{
QProcess::startDetached(qApp->applicationFilePath(), QStringList());
return 0;
}
return e;
}
http://www.cnblogs.com/thorngirl/articles/3940888.html
