下面代码实现了windows下的:
- 开机自启
- 重启应用
#include <QApplication>
#include <QWidget>
#include <QDebug>
#include <QSetting>
#define REG_RUN "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
bool isRestart = false; //在其他类声明extern bool isRestart来改变isRestart的值来控制是否重启。
void setAppAutoStart(bool isAuto)
{
QString appPath = QApplication::applicationFilePath();
QString appName = QApplication::applicationName();
QSettings setting(REG_RUN, QSettings::NativeFormat);
if (isAuto)
{
setting.setValue(appName, appPath.replace('/', '\\'));
qInfo() << appName << " : " << REG_RUN;
if (setting.status() == QSettings::NoError)
{
qInfo() << "Auto start set success";
}
else
{
qWarning() << "Auto start set failure";
}
}
else
{
setting.remove(appName);
qInfo() << "delete auto start";
}
}
int main(int argc, char *argv[])
{
int ret = 0;
do {
QApplication a(argc, argv);
isRestart = false;
//设置为自启动
setAppAutoStart(true);
QWidget *w= new QWidget;
w->show();
ret = a.exec();
delete w; //注意这里析构掉QWiget.
}while(isRestart == true);//判断是否需要重启
return ret;
}