写点什么

Qt | 本地存储配置信息 QSettings

作者:YOLO.
  • 2022-10-14
    河北
  • 本文字数:1079 字

    阅读完需:约 4 分钟

Qt | 本地存储配置信息 QSettings

前言:

很多时候我们的程序需要在本地保留一些用户的配置或数据信息,方便下次启动程序的时候使用上次的数据信息,这就用到了 QSettings。


QSettings 支持应用程序能够跨会话记住它的设置。在 Windows 上,这些信息通常存储在系统注册表中,在 macOS 和 iOS 上则存储在属性列表文件中。在 Unix 系统中,在没有标准的情况下,许多应用程序(包括 KDE 应用程序)使用 INI 文本文件。


QSettings 的 API 基于 QVariant,允许你方便的保存大多数基于值的类型,如 QString, QRect 和 QImage 等。


我就是在开发一个浏览器小程序的下载功能时试用到了这个类。我需要记录浏览器下载的记录,下次启动浏览器时,需要加载下载记录并显示出来。

QSettings 的使用:

创建 settings:

  • 在创建 QSettings 对象时,必须传递公司或组织的名称以及应用程序的名称用以区别不同程序的 QSettings。例如,如果你的产品叫 Star Runner,你的公司叫 MySoft,构造 QSettings 对象时应该如下:


QSettings settings("MySoft", "Star Runner");
复制代码


  • QSettings 对象既可以在堆栈上创建(上面的创建方式),也可以在堆上创建(即使用 new)。构造和销毁一个 QSettings 对象非常快。

  • 如果你在应用程序的很多地方使用 QSettings,你可以使用 QCoreApplication::setOrganizationName()和 QCoreApplication::setApplicationName()来指定组织名称和应用名称,然后直接使用默认的 QSettings 构造函数创建一个 QSettings。方法如下:


QCoreApplication::setOrganizationName("MySoft");QCoreApplication::setOrganizationDomain("mysoft.com");QCoreApplication::setApplicationName("Star Runner");      ...QSettings settings;
复制代码

添加/修改一条 setting:

  • QSettings 仓库中每个 setting 由一个 QString 类型的 key 和一个存储与 key 相关的 QVariant 类型的 value 组成。要编写一个设置,可以使用 setValue()。例如:


settings.setValue("editor/wrapMargin", 68);
复制代码


如果已经存在具有相同键的设置,则现有值将被新值覆盖。为了提高效率,更改可能不会立即保存到永久存储中。(你可以随时调用 sync()来提交你的修改。)

获取 setting 对应的值:

  • 你可以使用 value()来获取设置的值:


int margin = settings.value("editor/wrapMargin").toInt();
复制代码


如果没有指定名称的设置,QSettings 返回一个空 QVariant(可以转换为整数 0)。你可以通过传递第二个参数给 value()来指定另一个默认值(即,当没有指定名称时应该返回的值):


int margin = settings.value("editor/wrapMargin", 80).toInt();
复制代码

其他:

  • 要判断给定键是否存在,可以调用 contains()。

  • 要删除与键相关的 setting,可以调用 remove()。

  • 要获取所有键的列表,可以调用 allKeys()。

  • 要删除所有键,可以调用 clear()。

发布于: 刚刚阅读数: 3
用户头像

YOLO.

关注

还未添加个人签名 2022-05-06 加入

还未添加个人简介

评论

发布
暂无评论
Qt | 本地存储配置信息 QSettings_qt_YOLO._InfoQ写作社区