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

相关文章

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中Scanner的用法示例小结

《Java中Scanner的用法示例小结》有时候我们在编写代码的时候可能会使用输入和输出,那Java也有自己的输入和输出,今天我们来探究一下,对JavaScanner用法相关知识感兴趣的朋友一起看看吧... 目录前言一 输出二 输入Scanner的使用多组输入三 综合练习:猜数字游戏猜数字前言有时候我们在

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

SQL BETWEEN 的常见用法小结

《SQLBETWEEN的常见用法小结》BETWEEN操作符是SQL中非常有用的工具,它允许你快速选取某个范围内的值,本文给大家介绍SQLBETWEEN的常见用法,感兴趣的朋友一起看看吧... 在SQL中,BETWEEN是一个操作符,用于选取介于两个值之间的数据。它包含这两个边界值。BETWEEN操作符常用

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自