qt实现程序自启动

        实现应用程序自启动需要使用到的类:QSettings

用到的注册表地址:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

注意:在注册表中'/'不能使用,因此在字符串表达时需用双斜杠'\\';

一QSettings类介绍

1.枚举说明:

        1.Format枚举:

 Format { NativeFormat, Registry32Format, Registry64Format, IniFormat, InvalidFormat }


QSettings::NativeFormat  //使用平台最合适的存储格式存储设置。windows注册表,macOS和iOS是CFPreferencesAPI,Unix是INI配置文件
QSettings::Registry32Format  //32位注册表
QSettings::Registry64Format  //64位注册表
QSettings::IniFormat  //INI文件
QSettings::InvalidFormat  //Special value returned by registerFormat().

        2.Scope枚举:

Scope { UserScope, SystemScope }


QSettings::UserScope  //将设置存储在特定于当前用户的位置(例如,在用户的主目录中)
QSettings::SystemScope  //将设置存储在全局位置,以便同一台机器上的所有用户访问同一组设置。

        3.Status枚举:

Status { NoError, AccessError, FormatError }


QSettings::NoError //没有发生错误。
QSettings::AccessError  //发生访问错误(例如,试图写入只读文件)
QSettings::FormatError  //出现格式错误(例如加载格式错误的INI文件)

2.构造函数:

QSettings(const QString &fileName, Format format, QObject *parent = Q_NULLPTR);

QSettings(const QString &fileName, Format format, QObject *parent = Q_NULLPTR)
//fileName:注册表的地址,注意:使用"\\"而不是"/";
//format:创建的格式
//如果format是QSettings::IniFormat,则fileName是INI文件的名称。
//如果format是QSettings::NativeFormat,文件名是系统注册表中的路径。

3.常用的公共函数 :


1.void setValue(const QString &key, const QVariant &value);

void setValue(const QString &key, const QVariant &value);
//将“设置关键点”的值设置为“值”。如果键已存在,则覆盖上一个值。在windows上不区分大小写.
QSettings settings;
  settings.setValue("interval", 30);
  settings.value("interval").toInt();     // returns 30

  settings.setValue("interval", 6.55);
  settings.value("interval").toDouble();  // returns 6.55


2.QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const

QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const
//返回设置键的值。如果设置不存在,则返回defaultValue。如果未指定默认值,则返回默认QVariant。

  QSettings settings;
  settings.setValue("animal/snake", 58);
  settings.value("animal/snake", 1024).toInt();   // returns 58
  settings.value("animal/zebra", 1024).toInt();   // returns 1024
  settings.value("animal/zebra").toInt();         // returns 0

3.QStringList QSettings::allKeys() const

QStringList QSettings::allKeys() const
//返回可以使用QSettings对象读取的所有键(包括子键)的列表。
//如果使用beginGroup()设置组,则只返回组中的键,而不返回组前缀:
  QSettings settings;
  settings.setValue("fridge/color", QColor(Qt::white));
  settings.setValue("fridge/size", QSize(32, 96));
  settings.setValue("sofa", true);
  settings.setValue("tv", false);
  QStringList keys = settings.allKeys();
  // keys: ["fridge/color", "fridge/size", "sofa", "tv"]
settings.beginGroup("fridge");
  keys = settings.allKeys();
  // keys: ["color", "size"]

4.void QSettings::beginGroup(const QString &prefix) 

void QSettings::beginGroup(const QString &prefix)
//将前缀附加到当前组。
//当前组自动前置到指定给QSettings的所有键。此外,childGroups()、childKeys()和allKeys()等查询函数都基于组。默认情况下,未设置任何组。

5.bool QSettings::contains(const QString &key) const

bool QSettings::contains(const QString &key) const
//如果存在名为key的设置,则返回true;否则返回false。
//如果使用beginGroup()设置组,则键被视为相对于该组。

 6.[static] Format QSettings::defaultFormat()

[static] Format QSettings::defaultFormat()
//返回用于存储QSettings(QObject*)构造函数设置的默认文件格式。
//如果未设置默认格式,则使用QSettings::NativeFormat。

7.QString QSettings::fileName() const 

QString QSettings::fileName() const
//返回使用此QSettings对象写入的设置的存储路径。
//在Windows上,如果格式为QSettings::NativeFormat,则返回值是系统注册表路径,而不是文件路径。

8.QString QSettings::group() const 

QString QSettings::group() const
//返回当前组

9.void QSettings::remove(const QString &key)

void QSettings::remove(const QString &key)
//删除设置键和键的任何子设置。 
  QSettings settings;
  settings.setValue("ape");
  settings.setValue("monkey", 1);
  settings.setValue("monkey/sea", 2);
  settings.setValue("monkey/doe", 4);

  settings.remove("monkey");
  QStringList keys = settings.allKeys();
  // keys: ["ape"]

10.Status QSettings::status() const

Status QSettings::status() const
//返回状态代码,指示QSettings遇到的第一个错误,如果没有发生错误,则返回QSettings::NoError。

二、使用步骤

具体实现代码,确定注册表地址:

"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"

实现代码: 

#include "widget.h"
#include <QApplication>
#include<QSettings>
#include<QDebug>
#define REG_RUN "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
void setProcessAutoRunSelf(){
    QSettings settings(REG_RUN,QSettings::NativeFormat);
    //设置注册表路径
    QString app_name=QApplication::applicationName();//应用程序名称
    qDebug()<<app_name; //AutoRun  不带后缀名
    QString app_path=QApplication::applicationFilePath();//应用程序绝对路径
    settings.setValue(app_name,app_path);
    QString str=settings.value(app_name).toString();
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    setProcessAutoRunSelf();
    Widget w;
    w.show();
    return a.exec();
}

*****注意事项 :要使用注册表实现开机自启动,qtcreator必须要以管理员身份运行,否则会报以下错误:

QSettings: failed to set subkey "AutoRun": ????????

总结


以上就是如何使用qt创建应用程序自启动,原理就是"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"这里路径下面创建key-value值,key:名称,value:要自启动的应用程序路径

在主要用到了QSettings类,这个类可以修改注册表以及创建ini配置文件,具体问题具体看待。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值