QSettings Class

news2024/11/28 14:46:21

QSettings类

  • QSettings类
    • 公共类型(枚举)
    • 公有成员函数
    • 静态成员函数
    • 函数作用
    • 这个类写文件的特征


QSettings类

QSettings类提供持久的独立于平台的应用程序设置。

头文件:#include< QSettings >
qmake:QT + =core
继承(父):QObject

公共类型(枚举)

0:使用最适合平台的存储格式存储设置。
在Windows上,这意味着系统注册表;
在macOS和iOS上,这意味着CFPreferences API在Unix上,这意味着INI格式的文本配置文件。(PC平台QSettings::NativeFormat )
1:将设置保存在INI文件中。注意,INI文件失去了数字数据和用于编码它们的字符串之间的区别,所以写为数字的值应该作为QString读回。(嵌入式平台QSettings::IniFormat )

在Unix上,NativeFormat和IniFormat意思相同,只是文件扩展名不同(。用于NativeFormat的配置。ini格式的ini)。

enum	Format { NativeFormat, Registry32Format, Registry64Format, IniFormat, InvalidFormat }

0:将设置存储在特定于当前用户的位置(例如,在用户的主目录中)。
1:将设置存储在全局位置,以便同一台计算机上的所有用户都可以访问同一组设置。

enum	Scope { UserScope, SystemScope }

0:没有发生错误。
1:出现访问错误(例如,试图写入只读文件)。
2:出现格式错误(例如,加载格式错误的INI文件)。

enum	Status { NoError, AccessError, FormatError }

注意点

INI文件格式对键的语法有严格的限制。Qt通过在键中使用%作为转义字符来解决这个问题。此外,如果您保存一个顶级设置(一个没有斜杠的键,例如“someKey”),它将出现在INI文件的“General”部分。为了避免覆盖其他键,如果您使用像“General/someKey”这样的键来存储内容,该键将位于“%General”部分,而不是“General”部分。


遵循我们应该在接受的内容上开明,在生成的内容上保守的原则,QSettings将接受Latin-1编码的INI文件,但生成纯ASCII文件,其中非ASCII值使用标准INI转义序列进行编码。为了提高INI文件的可读性(但可能不太兼容),可以调用setIniCodec()。

公有成员函数

返回类型函数
构造函数QSettings(QSettings::Scope scope, QObject *parent = nullptr)
构造函数QSettings(QObject *parent = nullptr)
构造函数QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)
构造函数QSettings(QSettings::Format format, QSettings::Scope scope, const
构造函数QSettings(QSettings::Scope scope, const QString &organization, const
构造函数QSettings(const QString &organization, const QString &application = QString(), QObject *parent = nullptr)
virtual~QSettings()
QStringListallKeys() const
QStringapplicationName() const
voidbeginGroup(const QString &prefix)
intbeginReadArray(const QString &prefix)
voidbeginWriteArray(const QString &prefix, int size = -1)
QStringListchildGroups() const
QStringListchildKeys() const
voidclear()
boolcontains(const QString &key) const
voidendArray()
voidendGroup()
boolfallbacksEnabled() const
QStringfileName() const
QSettings::Formatformat() const
QStringgroup() const
QTextCodec *iniCodec() const
boolisAtomicSyncRequired() const
boolisWritable() const
QStringorganizationName() const
voidremove(const QString &key)
QSettings::Scopescope() const
voidsetArrayIndex(int i)
voidsetAtomicSyncRequired(bool enable)
voidsetFallbacksEnabled(bool b)
voidsetIniCodec(QTextCodec *codec)
voidsetIniCodec(const char *codecName)
voidsetValue(const QString &key, const QVariant &value)
QSettings::Statusstatus() const
voidsync()
QVariantvalue(const QString &key, const QVariant &defaultValue = QVariant()) const

静态成员函数

返回类型函数
QSettings::FormatdefaultFormat()
QSettings::FormatregisterFormat(const QString &extension, QSettings::ReadFunc readFunc, QSettings::WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive)
voidsetDefaultFormat(QSettings::Format format)
voidsetPath(QSettings::Format format, QSettings::Scope scope, const QString &path)

函数作用

构造函数

QSettings::QSettings(const QString &organization, const QString &application = QString(), QObject *parent = nullptr)

代码

QSettings settings("Moose Soft", "Facturo-Pro");

相当于

QCoreApplication::setOrganizationName("Moose Soft");
QCoreApplication::setApplicationName("Facturo-Pro");
QSettings settings;

常用构造函数

QSettings::QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)

构造一个QSettings对象,用于访问存储在名为文件名,带父级父母。如果该文件尚不存在,则创建该文件。

如果格式是QSettings::NativeFormat,的意思文件名取决于平台。在Unix上,文件名是INI文件的名称。在macOS和iOS上,文件名是的名称.plist文件。在Windows上,文件名是系统注册表中的路径。

如果格式是QSettings::IniFormat, 文件名是INI文件的名称。


构造函数

QSettings::QSettings(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr)

如果范围是QSettings::UserScope,QSettings对象首先搜索用户特定的设置,然后作为后备搜索系统范围的设置。
如果范围是QSettings::SystemScope,QSettings对象忽略用户特定的设置,并提供对系统范围设置的访问。

如果格式是QSettings::NativeFormat本机API用于存储设置。如果格式是QSettings::IniFormat,则使用INI格式。

如果没有给出应用程序名称,QSettings对象将只访问整个组织位置.


析构函数

QSettings::~QSettings()

任何未保存的更改最终都将被写入永久存储。

获取所有键

QStringList QSettings::allKeys() const

例子:可以存储颜色,点,布尔等等

QSettings settings;
settings.setValue("fridge/color", QColor(Qt::white));
settings.setValue("fridge/size", QSize(32, 96));
settings.setValue("sofa", true);
settings.setValue("tv", false);

QStringList keys = settings.allKeys();
// keys: ["fridge/color", "fridge/size", "sofa", "tv"]

如果使用beginGroup()设置组,则只返回组中的键,而不返回组前缀:

settings.beginGroup("fridge");
keys = settings.allKeys();
// keys: ["color", "size"]

开始一个组

void QSettings::beginGroup(const QString &prefix)

向当前组追加前缀。 当前组自动添加到指定给QSettings的所有键的前面。此外,查询函数如childGroups()、childKeys()和allKeys()都是基于组的。默认情况下,不设置任何组。 群组有助于避免反复键入相同的设置路径。例如:

settings.beginGroup("mainwindow");
settings.setValue("size", win->size());
settings.setValue("fullScreen", win->isFullScreen());
settings.endGroup();

settings.beginGroup("outputpanel");
settings.setValue("visible", panel->isVisible());
settings.endGroup();

调用endGroup()将当前组重置为对应的beginGroup()调用之前的状态。组可以嵌套。


向当前组添加前缀,并开始从数组中读取。返回数组的大小。

int QSettings::beginReadArray(const QString &prefix)
struct Login {
    QString userName;
    QString password;
};
QList<Login> logins;
...

QSettings settings;
int size = settings.beginReadArray("logins");
for (int i = 0; i < size; ++i) {
    settings.setArrayIndex(i);
    Login login;
    login.userName = settings.value("userName").toString();
    login.password = settings.value("password").toString();
    logins.append(login);
}
settings.endArray();

向当前组添加前缀,并开始写入大小为size的数组。如果size为-1(默认值),则根据写入条目的索引自动确定。 如果某一组键出现了很多次,可以使用数组来简化操作。例如,假设您想要保存一个可变长度的用户名和密码列表。然后你可以写:

void QSettings::beginWriteArray(const QString &prefix, int size = -1)
struct Login {
    QString userName;
    QString password;
};
QList<Login> logins;
...

QSettings settings;
settings.beginWriteArray("logins");
for (int i = 0; i < logins.size(); ++i) {
    settings.setArrayIndex(i);
    settings.setValue("userName", list.at(i).userName);
    settings.setValue("password", list.at(i).password);
}
settings.endArray();

存储格式

logins/size
logins/1/userName
logins/1/password
logins/2/userName
logins/2/password
logins/3/userName
logins/3/password
...

如果存在名为key的设置,则返回true否则返回false。

bool QSettings::contains(const QString &key) const

返回使用此QSettings对象写入的设置的存储路径。

QString QSettings::fileName() const

删除设置键和键的任何子设置。

void QSettings::remove(const QString &key)

例子

QSettings settings;
settings.setValue("ape");
settings.setValue("monkey", 1);
settings.setValue("monkey/sea", 2);
settings.setValue("monkey/doe", 4);

settings.remove("monkey");
QStringList keys = settings.allKeys();
// keys: ["ape"]

请注意,如果其中一个回退位置包含具有相同键的设置,则在调用remove()后该设置将可见。 如果key为空字符串,则删除当前组()中的所有键。例如:

QSettings settings;
settings.setValue("ape");
settings.setValue("monkey", 1);
settings.setValue("monkey/sea", 2);
settings.setValue("monkey/doe", 4);

settings.beginGroup("monkey");
settings.remove("");
settings.endGroup();

QStringList keys = settings.allKeys();
// keys: ["ape"]

注意,Windows注册表和INI文件使用不区分大小写的键,而macOS和iOS上的CFPreferences API使用区分大小写的键。为了避免可移植性问题。


设置访问INI文件的编解码器(包括。Unix上的conf文件)转换为编解码器。编解码器用于对从INI文件读取的任何数据进行解码,并对写入文件的任何数据进行编码。默认情况下,不使用编解码器,非ASCII字符使用标准INI转义序列进行编码。

void QSettings::setIniCodec(QTextCodec *codec)

警告:在访问任何数据之前,必须在创建QSettings对象之后立即设置编解码器。


设置访问INI文件的编解码器(包括。conf文件)转换为由codecName指定的编码的QTextCodec。codecName的常用值包括“UTF-8”、“ISO 8859-1”和“UTF-16”。如果编码没有被识别,什么都不会发生。

void QSettings::setIniCodec(const char *codecName)

将用于存储给定格式和范围的设置的路径设置为path。该格式可以是自定义格式。

void QSettings::setPath(QSettings::Format format, QSettings::Scope scope, const QString &path)

下表总结了默认值:

在这里插入图片描述


将设置键的值设置为value。如果该键已经存在,以前的值将被覆盖。

void QSettings::setValue(const QString &key, const QVariant &value)

注意,Windows注册表和INI文件使用不区分大小写的键,而macOS和iOS上的CFPreferences API使用区分大小写的键。


将任何未保存的更改写入永久存储,并重新加载同时已被另一个应用程序更改的任何设置。 这个函数由QSettings的析构函数自动调用,并由事件循环定期调用,所以通常不需要自己调用。

void QSettings::sync()

返回设置键的值。如果该设置不存在,则返回defaultValue。 如果没有指定默认值,则返回默认的QVariant

注意,Windows注册表和INI文件使用不区分大小写的键,而macOS和iOS上的CFPreferences API使用区分大小写的键。

QVariant QSettings::value(const QString &key, const QVariant &defaultValue = QVariant()) const
QSettings settings;
settings.setValue("animal/snake", 58);
settings.value("animal/snake", 1024).toInt();   // returns 58
settings.value("animal/zebra", 1024).toInt();   // returns 1024
settings.value("animal/zebra").toInt();         // returns 0

这个类写文件的特征

用户通常希望应用程序记住它的设置(窗口大小和位置,选项等)。)跨会话。

这些信息通常存储在Windows的系统注册表中,以及macOS和iOS的属性列表文件中。


在Unix系统上,由于缺乏标准,许多应用程序(包括KDE应用程序)都使用INI文本文件。


QSettings是围绕这些技术的抽象,使您能够以可移植的方式保存和恢复应用程序设置。它还支持自定义存储格式。
QSettings的API基于QVariant,可以让你用最少的努力保存大多数基于值的类型,比如QString、QRect、QImage
。 如果您只需要一个非持久的基于内存的结构,可以考虑使用QMap<QString,QVariant >来代替。


QSettings对象既可以在堆栈上创建,也可以在堆上创建(即使用new)。构造和销毁QSettings对象的速度非常快。

学完一定要看看妹子,放松下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/590323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Springboot +spring security,认证方式---实现HTTP摘要认证

一.简介 这篇文章来学习下security的认证方式其中的HTTP摘要认证 二.Spring Security的认证方式 2.1什么是认证 认证: 就是用来判断系统中是否存在某用户&#xff0c;并判断该用户的身份是否合法的过程&#xff0c;解决的其实是用户登录的问题。认证的存在&#xff0c;是为…

JavaScript高级三、深入面向对象

零、文章目录 JavaScript高级三、深入面向对象 1、编程思想 &#xff08;1&#xff09;面向过程介绍 面向过程&#xff1a;分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 &#xff08;2&…

Android 架构模式

1.三个基本架构 ①MVC&#xff08;Model-View-Controller&#xff09; Model&#xff1a;代表数据模型&#xff0c;管理数据状态。 View&#xff1a;视图&#xff0c;即呈现给用户的UI&#xff0c;包括布局文件及Activity。 Controller&#xff1a;控制者&#xff0c;负责处…

KubeVirt技术介绍及实验部署

虚拟化简介 在云计算发展中&#xff0c;有两类虚拟化平台&#xff1a; openstack&#xff08;iaas&#xff09;&#xff1a;关注于资源的利用&#xff0c;虚拟机的计算&#xff0c;网络和存储Kubernetes&#xff08;pass&#xff09;&#xff1a;关注容器的编排调度&#xff…

设计模式之~代码模式

描述&#xff1a; 代理模式&#xff08;Proxy&#xff09;&#xff0c;为其他对象提供一种代理以控制对这个对象的访问。 结构图&#xff1a; 优点: 代理模式能将代理对象与真实被调用的目标对象分离 一定程度上降低了系统的耦合度&#xff0c;扩展性好 可以起到保护目标对象…

发明专利公开 -- 一种基于 JSON 文件 + Http Header 的支持多项目、多分支、多人协同的 Api Mock/代理 工具

现阶段主流的前后端分离的开发模式下&#xff1a;前后端采用并行开发方式&#xff0c;在前端开发过程中通常需要依附于共同约定的接口格式及数据。 该过程是一个并行过程&#xff0c;因此 Api Mock 模拟接口的返回变成了必要。同时&#xff0c;联调过程中&#xff0c;修改后端…

目标检测笔记(九):详细介绍并实现-如何可视化深度学习中每层特征层的网络训练情况

文章目录 为什么要解析特征层如何可视化特征层可视化结果如何 ❤️ &#x1f9e1; &#x1f49b; &#x1f49a; &#x1f499; &#x1f49c; &#x1f5a4; &#x1f90d; &#x1f90e; &#x1f494; ❣️ &#x1f495; &#x1f49e; &#x1f493; &#x1f497; &#…

随笔-学会和解

上周六&#xff0c;媳妇儿去加班&#xff0c;回到家已经是晚上8点多了。当天的雨淅沥沥地下了一天&#xff0c;气温很低。 看着她情绪不是很高&#xff0c;也没说啥&#xff0c;赶紧安排吃饭。 我&#xff1a;咋的啦&#xff0c;项目不顺利&#xff1f; 她&#xff1a;还行吧…

【深度学习】【人脸检测模型】SCRFD模型的训练与部署实战

文章目录 Linux安装环境pythoninsightface环境 训练数据集准备todo 训练 Linux安装环境 python 我的cuda版本11.6&#xff1a; $ nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Tue_Mar__8_18:18:20_PST_2022…

gitlab占用内存太大了如何解决?

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号雄雄的小课堂 现在是&#xff1a;2023年5月30日16:58:15 最近在家里自己搞了个服务器&#xff0c;因为这台机器都不用了&#xff0c;从朋友那拿过来&#xff0c;就当服务器用了&#xff0c;看了下&#xff0c;比云服…

python基本操作2(速通版)

关于字符串的基本操作&#xff0c;以实例为主。 目录 一、字符串基本操作 1.基本字符串定义 2.字符串遍历 3字符串切片 二、字符串的常用方法 1.find函数 2.replace函数 3.count函数 4.分割和连接类的函数 5.字符串判断函数 6.去除字符串的 三、元组 1.元组的基本操…

离散数学-集合论

数学基础-离散数学-集合论 集合论是现代各科数学的基础&#xff0c;它起源于十六世纪末期的数集的研究。直到1876-1883年&#xff0c;康托尔发表了一系列有关集合论的文章&#xff0c;奠定了集合论的基础。1904-1908年&#xff0c;策墨罗(Zermelo)提出了集合论的公理系统&…

计算机组成原理-总线-总线的概念、事务和定时

目录 一、总线基本概念 总线特性 二、总线的分类 数据传输格式 2.2按总线的功能 2.2.1片内总线 2.2.2系统总线 2.2.3通信总线 2.3 按时序控制方式 三、系统总线的结构 3.1单总线结构 3.2双总线结构 3.3三总线结构 四、总线的性能指标 五、总线的4个阶段 六、总线的事…

5年测试经验,从月薪9k变1w5,进阶自动化测试真就这么香?

在这个吃技术的IT行业来说&#xff0c;我之前每天做的是最基础的工作&#xff0c;但是随着时间的消磨&#xff0c;我产生了对自我和岗位价值和意义的困惑。 一是感觉自己在浪费时间&#xff0c;另一个就是做了快2年的测试&#xff0c;感觉每天过得浑浑噩噩&#xff0c;薪资也从…

Java --- 云尚办公之微信公众号整合

目录 一、整合微信公众号 1.1、公众号菜单管理 1.2、微信授权登录 1.3、消息推送 一、整合微信公众号 1.1、公众号菜单管理 数据库表&#xff1a; CREATE TABLE wechat_menu (id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 编号,parent_id BIGINT(20) DEFAULT NULL CO…

day42|动态规划4-背包问题分割等和子集

0-1背包和完全背包搞清楚即可。 0-1背包问题-一维 背包有最大重量的限制&#xff0c;物品有重量有价值&#xff0c;那么在最大背包的限制下&#xff0c;能够得到的最大价值是多少&#xff1f; 暴力解法 每个物品都有放和不放两种状态&#xff0c;那么遍历所有的组合就可以…

谷歌浏览器 | Chrome DevTools系统学习篇- Elements面板(上)

大家好&#xff0c;文接上上回谷歌浏览器 | Chrome DevTools系统学习篇-概述&#xff0c;和上文谷歌浏览器 | Chrome DevTools系统学习篇-Device Mode。所谓“工欲善其事&#xff0c;必先利其器”&#xff0c;我们进一步来熟悉谷歌开发者工具。今天分享的是Elements元素&#x…

我在亚马逊云平台的学习成长之路

前言 今年是亚马逊云科技成立的第16个年头&#xff0c;也是云计算行业诞生的16周年。作为云计算时代的“领头羊”&#xff0c;亚马逊2006年推出了名为Amazon Web Services(AWS)的新产品。AWS背后的想法是提供一个平台&#xff0c;同亚马逊内部使用的平台一样&#xff0c;将其作…

Three.js--》实现3d地月模型展示

目录 项目搭建 初始化three.js基础代码 创建月球模型 添加地球模型 添加模型标签 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 项目搭建 本案例还…

230530-论文整理-课题组2

对这些研究有点兴趣颇微。 文章目录 Rethinking Dense Retrieval’s Few-Shot AbilityDecoder-Only or Encoder-Decoder? Interpreting Language Model as a Regularized Encoder-DecoderPLOME: Pre-training with Misspelled Knowledge for Chinese Spelling CorrectionRead…