重启功能在很多场景下都需要用到。比如在另外一个程序修改了某个配置文件的值,此时该程序根据这个配置文件的值获取到的所有数据都需要更新。一般这种情况我们会选择重启程序来重新初始化该程序。实现代码如下:
#include <QApplication>
class Restarter
{
public:
Restarter(int argc, char *argv[])
{
Q_UNUSED(argc)
m_executable = QString::fromLocal8Bit(argv[0]);
m_workingPath = QDir::currentPath();
}
void setArguments(const QStringList &args) { m_args = args; }
QString executable() const { return m_executable; }
QStringList arguments() const { return m_args; }
QString workingPath() const { return m_workingPath; }
int restartOrExit(int exitCode)
{
return qApp->property("restart").toBool() ? restart(exitCode) : exitCode;
}
int restart(int exitCode)
{
QProcess::startDetached(m_executable, m_args, m_workingPath);
return exitCode;
}
private:
QString m_executable;
QStringList m_args;
QString m_workingPath;
};
//example:
int main(int argc, char **argv)
{
Restarter restarter(argc, argv);
QApplication app(argc, argv);
//...
return restarter.restartOrExit(app.exec());
}
之后在程序中的UI线程哪个角落都可以使用qApp->setProperty("restart",true);来重启你的程序。其中原理就是通过QCoreApplication的属性来判断是否重启程序。重启代码如下:QProcess::startDetached(m_executable, m_args, m_workingPath);