Qt操作ini文件以及注册表的方法
背景
windows应用程序经常需要用文件保存程序的一些配置,.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式。
windows应用程序中经常需要获取某个应用程序的配置信息,而windows中将这些信息都存放在注册表中,所以我们需要学会操作注册表。
什么是ini文件
ini文件全称"initialization",文件后缀名为.ini,
ini 文件格式用于保存相关软件的配置信息。
ini配置文件常用于windows操作系统下的系统配置项或者软件的特性。
ini文件的格式
ini文件主要结构为:
- sections(段)
- keys(properties键)
- values(值)
sections格式:
[section]
a=a
b=b
说明:section用于表示一类的键值对,并且使用"[ ]"符合包围。一个ini文件中可以存在多个section。section之间不可以嵌套。
keys和values格式如下:
name=value
说明:键值对就是ini文件中最基本的元素。采用key=value的形式。一个section下可以有多个key=value。
其他说明:
- 大小写敏感问题:ini文件对大小写不敏感(具体取决于使用的解析库)
- 注释:";"表示注释的开头,分号之后的一行内容都为注释内容
- 空格:需要注意解析库对空格的说明,有些库对空格是不支持空格的。
Qt中操作ini文件
Qt中操作ini文件可以用QSettings来实现。QSettings可以直接访问INI和.plist文件。有时我们希望访问存储在特定文件或注册表路径中的设置。如果希望直接读取INI文件,可以使用QSettings构造函数,该构造函数以文件名作为第一个参数,并将QSettings::IniFormat作为第二个参数传递。例如:
QSettings settings("/home/petra/misc/myapp.ini", QSettings::IniFormat);
然后,就可以使用QSettings对象来读写文件中的设置。
- 首先需要设置用于访问INI文件的编解码器:
settings.setIniCodec("GBK"); //windowns系统用这个,linux系统用UTF_8
- 获取value值:
// 在获取之前需要设置用于访问INI文件的编解码器
QVariant value = settings.value(QString("/%1/%2").arg(sectionName).arg(keyName));
// 可以转化成QString
QString strValue = value.toString();
// 可以转化成int
QString nValue = value.toInt();
- 设置value值:
// 在设置之前需要设置用于访问INI文件的编解码器
QVariant keyValue;
settings.setValue(QString("/%1/%2").arg(sectionName).arg(keyName), keyValue);
- 移除一条数据:
// 在移除之前可以不用设置用于访问INI文件的编解码器
settings.remove(QString("/%1/%2").arg(sectionName).arg(keyName));
什么是注册表
注册表是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。
注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,在整个系统中起着核心作用。
这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。
注册表的格式
注册表是以树状数据结构进行数据存储的,它由一级一级的文件夹组成,最后一级打开是一张表,里面有key值和它对应的value值。所以当我们想要操作注册表时,要知道它的文件路径一级key值。
Qt中操作注册表
在Qt中操作注册表可以用QSettins来实现,QSettins还可以实现对ini文件的操作,详细可以参见上篇文章。有时我们希望访问存储在注册表路径中的设置。QSettings构造函数,该构造函数以文件路径作为第一个参数,并将QSettings::NativeFormat作为第二个参数传递。例如:
QString RegPath = "HKEY_LOCAL_MACHINE\SOFTWARE\ABC\ABCD";
QSettings reg (RegPath, QSettings::NativeFormat);
QSettings key = "ABCDPath";
然后,就可以使用QSettings对象来获取注册表中某个key值的value:
QVariant value = reg.value(key); //读取注册表值
// 可以转化成QString
QString strValue = value.toString();
// 可以转化成int
QString nValue = value.toInt();
设置注册表中某个key值的value:
reg.setValue(key, "ABCDPathValue"); //设置注册表值
删除注册表中某个key:
reg.remove(key);
上面这些就是一些基本的通过QSettings操作ini文件和注册表的方法了。以后如果还有用到其他方法,还会进行补充。
- 点赞
- 收藏
- 关注作者
评论(0)