保存应用程序设置(QSettings)

1.   QSettings 类

  • QSettings 提供保存应用程序当前设置的接口,可以方便地保存程序的状态,例如窗口大小和位置,选项的选中状态等等。

  • 在 Windows 系统中,程序程序的状态信息记录在注册表中;在 Mac OS X 系统上,这些信息记录在 XML 配置文件中;在 Unix 系统中,则使用 INI text 文件记录。QSettings 则是对这些技术的一个抽象,使得保存和取得应用程序的设置状态的只得独立于操作系统。

  • QSettings 的 API 是基于 QVariant 类,当创建一个 QSettings 对象时,必须传递公司或组织的名称(QString)和应用程序的名称(QString)用于构造一个 QSettings 对象。

2.   使用 QSettings

(1)构造一个 QSettings 对象

  • QSettings settings("MySoft", "Star Runner") ;

(2)添加一个设置到 settings 中

  • 程序的设置是以“key-value”的形式,保存在 QSettings 对象中的。其中,key 由一个 QString 类型定义,value 是由 QVariant 类型定义:

  • settings.setValue( "editor/wrapMargin", 68 ) ;

/*  wrapMargin 是一个子 key

/*  如果存在相同的 key,那么已存在的 key 所对应的值将由新值代替

(3)从 setttings 中取出设置

  • 同时也可以通过 key 从 settings 中取出值:

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

3.   QSettings 的组织方式

(1)用“/”表示子 key

  • QSettings 存储状态信息的形式是 key-value,其中 key 与文件路径这个概念是类似的,subkey 可以用定义文件路径的形式定义,例如 findDialog/ matchCase,其中 matchCase 就是一个 subkey;

(2)使用 beginGroup( ) 和 endGroup( )

  • void QSettings : : beginGroup( const QString &prefix ) 的作用是在当前的 group 后面加上 prefix。当前的 group 自动加到一个 QSettings 对象的尾部:

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

  • 这样设置后,当前的 settings 对象看上去应该是这样的层次结构:

mainwindow/ size

mainwindow/ fullScreen

outputpanel/ visible

(3)取得 key 与子 key

  • QStringList QSettings : : childKeys( ) const 函数返回所有顶层 keys,组成一个 QStringList 作为一个返回值。例如:

QSettings settings ;

settings.setValue("fridge/color", Qt::white) ;

settings.setValue("fridge/size", QSize(32, 96) ) ;

settings.setValue("sofa", true) ;

settings.setValue("tv", false) ;

QStringList keys = settings.childKeys( ) ;

  • 那么这个 keys 中看上去应该是这样的:

  • keys: [ "sofa", "tv" ]

  • QStringList QSettings : : childGroups ( ) const 是返回所有包含有 key 的顶层 groups,组成一个 QStringList 作为返回值:

QSettings settings ;

settings.setValue("fridge/color",Qt::white);

settings.setValue("fridge/size",QSize(32,96));

settings.setValue("sofa",true);

settings.setValue("tv",false);

QStringList groups = settings.childGroups() ;

  • 则 groups 看上去是:

  • groups : [ "fridge" ]

4.   保存和取得程序的设置

(1)在主窗口的构造函数中,readSettings( )

void MainWindow::readSettings()
{
   QSettings settings("Software Inc.", "Spreadsheet");   // 写入与读取的 settings 要一致

restoreGeometry(settings.value("geometry").toByteArray());

recentFiles = settings.value("recentFiles").toStringList();
   updateRecentFileActions();

bool showGrid = settings.value("showGrid", true).toBool();
   showGridAction->setChecked(showGrid);

bool autoRecalc = settings.value("autoRecalc", true).toBool();
   autoRecalcAction->setChecked(autoRecalc);
}

(2)在关闭主窗口时,writeSettings( )

void MainWindow::writeSettings()
{
   QSettings settings("Software Inc.", "Spreadsheet");

settings.setValue("geometry", saveGeometry());
   settings.setValue("recentFiles", recentFiles);
   settings.setValue("showGrid", showGridAction->isChecked());
   settings.setValue("autoRecalc", autoRecalcAction->isChecked());
}

/* 这里选择 4 个状态进行保存

保存应用程序设置(QSettings)相关推荐

  1. QSettings Class:提供与平台无关的持久性应用程序设置

    QSettings Class QSettings类提供与平台无关的持久性应用程序设置. Header: #include <QSettings> qmake: QT += core In ...

  2. Windows8 Metro开发 (04) : 保存/读取本地应用程序设置

    有些时候我们需要保存应用程序的设置,如用户的系统设定.在Android中,我们可以使用sharepreference.在Metro中我们该怎么做呢? 保存/读取基本类型数据 Metro程序会把要保存的 ...

  3. 客户端Blazor中的应用程序设置

    目录 加载客户端应用程序设置 向客户端公开设置 从客户端获取设置 我通过ASP.NET宠坏了,希望应用程式设置能正常工作,但是客户端Blazor还没有一个容易配置的应用程序设置文章.我想要的是能够通过 ...

  4. 最详细的【微信小程序+阿里云Web服务】开发部署指引(十一):开发小程序设置功能

    文章目录 前言 一.功能说明 二.设置界面代码实现 1.创建界面Page 2.WXML 3.JS 4.WXSS 三.参数控制逻辑代码实现 1.自动跳转卡片 2.自动播放声音 专题文章链接 前言 案例的 ...

  5. 【.net 深呼吸】自己动手来写应用程序设置类

    在开始装逼之前,老周先说明一件事.有人说老周写的东西太简单了,能不能写点复杂点.这问题就来了,要写什么东西才叫"复杂"?最重要的是,写得太复杂了,一方面很多朋友看不懂,另一方面,连 ...

  6. GD32篇 一、GD32程序设置读保护,防止程序被读取

    GD32篇 记录 一.GD32开发版程序设置读保护,防止程序被读取 二.GD32TIMER输出PWM 平台:PC 系统:Win10 1909 开发版:GD32F103RCT6 软件:Keil.STM3 ...

  7. FleaPHP 开发指南 - 5. 应用程序设置

    FleaPHP 是一个具有高度灵活性的框架.开发者可以用不同的设置来调整 FleaPHP 的工作方式.这些设置统一保存在名为"应用程序设置"的数据源中. 实际上,除了 FleaPH ...

  8. 店长宝微信小程序后台功能简介(四)——小程序设置

    本文参考自: 原文地址 继续为大家介绍店长宝微信小程序的后台功能,今天介绍后台中的小程序设置功能. 小程序设置功能:版权设置.个人中心.商家设置.商家手机端.小程序跳转.内嵌网页.门店管理.门面管理. ...

  9. iphone 应用程序设置和默认设置

    用户默认设置是应用程序首选项的一部分,由NSUserDefaults类实现,用户保存和获取首选项.与NSDictonary获取数据一样,实用键值读取和保存首选项数据.不同之处是NSUserDefaul ...

最新文章

  1. 漫画:骚操作系列(灯泡开关的经典面试题)
  2. python安装第三方库-Python安装第三方库的3种方法
  3. 【Android 插件化】“ 插桩式 “ 插件化框架 ( 代理 Activity 组件开发 )
  4. NoClassDefFoundError和ClassNotFoundException
  5. [转载] python循环中break、continue 、exit() 、pass的区别
  6. vue动态引入外部CDN导致线上项目页面无法显示 - 看了不亏
  7. #import和@class 的区别
  8. python是什么编程语言-Python是什么?可能是最受欢迎的编程语言
  9. java蓝牙开发_Android蓝牙开发全面总结
  10. 全景图航拍的方法,制作航拍全景图的步骤
  11. 计算机编辑功能在哪,win10系统本地组策略编辑器在哪的具体步骤
  12. 住宅代理和数据中心代理哪个更好?
  13. J酒店上海中心:云端艺邸 数字典藏
  14. 看完这篇操作系统,和面试官扯皮就没问题了
  15. VScode Shortcuts for Mac
  16. FLUENT液滴挥发模拟
  17. 关于eclipse的源码翻阅(Eclipse中,open declaration;open implementation;open super implementation )
  18. sd和sem啥区别_sd和sem的区别 sem测试主要测什么
  19. word格式角落的直角问题又名裁剪标记
  20. 简直不要太硬了!一文带你彻底理解文件系统

热门文章

  1. python可以自学吗
  2. java竞猜活动_Java商品价格竞猜活动
  3. Slicer学习笔记(五十五)slicer分割segmentationNode包含的信息与使用
  4. Gym 100851F Froggy Ford(dijkstra)
  5. 完善的 fanuc发那科 Mitsubishi数控系统 用SDK方式数据采集,NC程序下发
  6. PDF文件在线转换成PPT
  7. LS1046A 调试记录
  8. Java调用mysqldump
  9. EHR in USA (From Healthimaging)
  10. scraino编程流程图_Scraino使用手册V2.0