QSettings读写注册表、配置文件

简述

一般情况下,我们在开发软件过程中,都会缓存一些信息到本地,可以使用轻量级数据库sqlite,也可以操作注册表、读写配置文件。

关于QSettings的使用前面已经介绍过了,比较详细,见“更多参考”,下面介绍下QSettings常用功能-读写注册表、配置文件。

优点

无需指定注册表路径

一般情况下,我们需要定义一个宏,或者常量字符串来指定保存的注册表位置。

#define HKEY_CURRENT_USER_QT "HKEY_CURRENT_USER\\SoftWare\\Digia\\Qt"

const QString HKEY_CURRENT_USER_QT = "HKEY_CURRENT_USER\\SoftWare\\Digia\\Qt;"

无需指定配置文件路径

一般情况下,我们需要定义一个宏,或者常量字符串来指定保存的配置文件位置及名称。

#define INI_QT "C:\\Users\\WangL\\AppData\\Roaming\\Digia"

const QString INI_QT = "C:\\Users\\WangL\\AppData\\Roaming\\Digia";

采用下面方式,我们不需要做太多工作,Qt已经很好的替你实现了!

读写注册表

下面我们以Qt为例,众所周知现在Qt已经属于Digia,也就是说:组织名为Digia,产品名为Qt。

在main()函数中,首先设置组织名、产品名。

QCoreApplication::setOrganizationName(QString("Digia"));
QCoreApplication::setApplicationName(QString("Qt"));

然后使用QSettings对注册表进行操作:

QSettings settings(QSettings::NativeFormat, QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());

settings.setValue("Name", "Qt Creator");
settings.setValue("Version", 5);

QString strName = settings.value("Name").toString();
int nVersion = settings.value("Version").toInt();

qDebug() << QString("Name:%1 Version:%2").arg(strName).arg(nVersion);

这时,我们可以查看控制台输出,并可以查看注册表数据可以正常读写。

这里写图片描述

读写配置文件

如上,我们只需要将格式从NativeFormat变为IniFormat即可:

QSettings settings(QSettings::IniFormat, QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());

settings.setValue("Name", "Qt Creator");
settings.setValue("Version", 5);

QString strName = settings.value("Name").toString();
int nVersion = settings.value("Version").toInt();

qDebug() << QString("Name:%1 Version:%2").arg(strName).arg(nVersion);

这时,我们可以查看控制台输出,并可以查看本地配置文件数据可以正常读写。

我们可以进入文件夹:C:\Users\WangL\AppData\Roaming(AppData默认为隐藏文件,需要设置显示才可查看),可以看到生成了文件夹”Digia”以及配置文件”Qt.ini”。

打开文件,我们可以看到里面已经生成了所需的配置:

这里写图片描述

分组

我们可以看到配置文件中包含默认的分组为:General。通常情况下,我们需要对配置进行归类,例如:产品名称、版本号属于设置组,用户名、密码等信息属于用户组。

QSettings settings(QSettings::IniFormat, QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());

settings.beginGroup("Setting");
settings.setValue("Name", "Qt Creator");
settings.setValue("Version", 5);
settings.endGroup();

settings.beginGroup("User");
settings.setValue("UserName", "WangL");
settings.setValue("Password", "123456");
settings.endGroup();

这时我们再次查看配置文件,里面已经生成了另外两个分组。

这里写图片描述

更多参考

相关文章