简述
一般情况下,我们在开发软件过程中,都会缓存一些信息到本地,可以使用轻量级数据库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\WangLiang\AppData\Roaming\Digia"
const QString INI_QT = "C:\Users\WangLiang\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);
这时,我们打开注册表regedit,数据就生成了。
一般读取
存储完数据之后,默认的程序启动时需要加载对应的数据。
QString strName = settings.value("Name").toString();
int nVersion = settings.value("Version").toInt();
//Name:Qt Creator Version:5
这时,我们可以通过查看应用程序输出窗口得到输出结果。
分目录存储
如果我们需要在同一路径下建立多个子目录该怎么办,下面介绍两种方式。
替换applicationName
如上,我们可以看出,organizationName对应的注册表路径为HKEY_CURRENT_USER\\SoftWare\\Digia,appl