qt QSettings 用法总结

2024-01-05 09:18
文章标签 总结 qt 用法 qsettings

本文主要是介绍qt QSettings 用法总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      本文先从概念和用法上讲述下QSettings的简单用法,最后以一个简单而较全面的使用例子结束,一句话:实践出真知!

QSettings 类提供“持久性”,平台独立的应用程序设置。意思是,程序关闭后QSettings把窗体大小,位置,用户设置的Option 保存起来,下次

打开程序时再重新加载。


如果你需要的是“非持久性” 基于内存的数据结构,可以考虑使用QMap<QString,QVariant> 代替。


通常,对于Windows,配置信息保存在“注册表”中,Mac OS 是XML 文件,Unix 是INI 文件

// 构造函数
QSettings settings("MySoft", "Star Runner"); //  公司或组织名  // 应用程序名

QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft.com"); // 专为Mac OS X 准备的
QCoreApplication::setApplicationName("Star Runner");
...
QSettings settings;


如果要在程序很多地方使用QSettings,用 QCoreApplication::setOrganizationName() 和QCoreApplication::setApplicationName() 然后用QSettings 的默认构造函数。

这样,公司或组织名,应用程序名只要指定一次,QSettings settings 到处扔就行。


QSettings 存储了一对键值( Key / value ) ,Key 是一个QString,Value是一个QVariant


settings.setValue("editor/wrapMargin", 68);  //添加一对键值

添加键值的时侯,如果Key 已存在,则Value 被重写。


出于效率的原因,setValue 不会立既写入(如注册表,INI, XML), 要立既写入可以用sync() 函数。

int margin = settings.value("editor/wrapMargin").toInt();

通过Key,取回Value。如果指定的Key 不存在,QSettings 返回空的QVariant(转成整型是 0)。


// 类型转换
QSettings settings("MySoft", "Star Runner");
QColor color =settings.value("DataPump/bgcolor").value<QColor>();


// 通过"/" 分组
settings.setValue("mainwindow/size",win->size());
settings.setValue("mainwindow/fullScreen",win->isFullScreen());
settings.setValue("outputpanel/visible",panel->isVisible());


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

settings.beginGroup("outputpanel");
settings.endGroup();

添加分组,并链表化,读写分组

void   QSettings :: beginWriteArray (   const QString   &   prefix , int   size   = - 1 )
Adds prefix to the current group and starts writing an array of size size. 
If size is -1 (the default), it is automatically determined based on the indexes of the entries written.
If you have many occurrences of a certain set of keys, 
you can use arrays to make your life easier.
For example, let's suppose that you want to save a variable-length list of user names and passwords.
You could then write:

structLogin{

    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();

遍历分组


intQSettings::beginReadArray(constQString&prefix)

Adds prefix to the current group and starts reading from an array. Returns the size of the array.
Example:
 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();


///MailClient的例子/

void MailClient::readSettings()
{
    QSettings settings("Software Inc.", "Mail Client");


    settings.beginGroup("mainWindow");
    restoreGeometry(settings.value("geometry").toByteArray());
    mainSplitter->restoreState(
            settings.value("mainSplitter").toByteArray());
    rightSplitter->restoreState(
            settings.value("rightSplitter").toByteArray());
    settings.endGroup();
}


void MailClient::writeSettings()
{
    QSettings settings("Software Inc.", "Mail Client");


    settings.beginGroup("mainWindow");
    settings.setValue("geometry", saveGeometry());
    settings.setValue("mainSplitter", mainSplitter->saveState());
    settings.setValue("rightSplitter", rightSplitter->saveState());
    settings.endGroup();
}



这篇关于qt QSettings 用法总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572387

相关文章

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Python中的sort()和sorted()用法示例解析

《Python中的sort()和sorted()用法示例解析》本文给大家介绍Python中list.sort()和sorted()的使用区别,详细介绍其参数功能及Timsort排序算法特性,涵盖自适应... 目录一、list.sort()参数说明常用内置函数基本用法示例自定义函数示例lambda表达式示例o

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.