概述
目录
前言
一QSettings类介绍
1.枚举说明:
1.Format枚举:
2.Scope枚举:
3.Status枚举:
2.构造函数:
QSettings(const QString &fileName, Format format, QObject *parent = Q_NULLPTR);
3.常用的公共函数 :
1.void setValue(const QString &key, const QVariant &value);
2.QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const
3.QStringList QSettings::allKeys() const
4.void QSettings::beginGroup(const QString &prefix)
5.bool QSettings::contains(const QString &key) const
6.[static] Format QSettings::defaultFormat()
7.QString QSettings::fileName() const
8.QString QSettings::group() const
9.void QSettings::remove(const QString &key)
10.Status QSettings::status() const
二、使用步骤
总结
前言
实现应用程序自启动需要使用到的类:QSettings
用到的注册表地址:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun
注意:在注册表中'/'不能使用,因此在字符串表达时需用双斜杠'\';
一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配置文件,具体问题具体看待。
最后
以上就是落后水壶为你收集整理的qt实现程序自启动前言一QSettings类介绍二、使用步骤总结的全部内容,希望文章能够帮你解决qt实现程序自启动前言一QSettings类介绍二、使用步骤总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复