Qt操作ini文件以及注册表的方法

举报
黑兔子 发表于 2022/09/20 10:08:03 2022/09/20
【摘要】 windows应用程序经常需要用文件保存程序的一些配置,.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式。 windows应用程序中经常需要获取某个应用程序的配置信息,而windows中将这些信息都存放在注册表中,所以我们需要学会操作注册表。

背景

windows应用程序经常需要用文件保存程序的一些配置,.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式。

windows应用程序中经常需要获取某个应用程序的配置信息,而windows中将这些信息都存放在注册表中,所以我们需要学会操作注册表。

什么是ini文件

ini文件全称"initialization",文件后缀名为.ini,
ini 文件格式用于保存相关软件的配置信息。
ini配置文件常用于windows操作系统下的系统配置项或者软件的特性。

ini文件的格式

ini文件主要结构为:

  1. sections(段)
  2. keys(properties键)
  3. 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文件和注册表的方法了。以后如果还有用到其他方法,还会进行补充。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。