保存应用程序设置(QSettings)

保存应用程序设置(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());
}

/* 这

时间: 2024-10-14 15:04:22

保存应用程序设置(QSettings)的相关文章

为应用程序设置一个图标 (窗口左上角 程序图标)

1.准备相应的图标文件 这里举例pr.ico2.创建img文件夹保存pr.ico文件3.创建rc文件,并输入以下内容     IDI_ICON1               ICON    DISCARDABLE     "/img/pr.ico"4.在项目文件.pro中添加如下内容      RC_FILE = pr.rc5.make6.你会发现应用程序的图标变成你指定的图标了. 为应用程序设置一个图标 (窗口左上角 程序图标),布布扣,bubuko.com

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

在开始装逼之前,老周先说明一件事.有人说老周写的东西太简单了,能不能写点复杂点.这问题就来了,要写什么东西才叫“复杂”?最重要的是,写得太复杂了,一方面很多朋友看不懂,另一方面,连老周自己也不知道怎么表述. 而且,老周也不能把以前在K公司.Z公司和T公司中做项目的东西写出来的,其实嘛,工作中的编程没什么可写的,无非就是 select.insert.delete.update,无非就是连接数据库,断开连接,同步一下数据,把数据变成XML或JSON再发给另一终端.无非就是读读你的网卡CPU硬盘序列号

Linux把程序设置成服务运行

在linux下,把程序设置systemctl服务,并开机启动.以nexus服务为例:进入usr/lib/systemd/system/目录 新建nexus.service文件,写入如下内容, 字段说明请百度systemctl服务的字段说明. 以nexus服务为例: 进入/usr/lib/systemd/system, 新建nexus.service文件,写入如下内容, 字段说明请百度systemctl服务的字段说明. …… [Unit] Description=Nexus After=netwo

在MFC中用WriteProfileInt等方法保存应用程序配置

0.简介 CWinApp类中提供了一组用于读写应用程序配置的方法: GetProfileInt WriteProfileInt GetProfileString WriteProfileString 可方便的用于读写应用程序配置. 1.关于CWinApp::SetRegistryKey方法 用VC++的向导建立MFC项目之后,在InitInstance中可以看到这样的语句: SetRegistryKey(_T("应用程序向导生成的本地应用程序")); 该函数将为以上提到的几个方法建立工

C++ C++ 控制台程序 设置图标

. 实现过程 创建1个控制台程序. 新建1个 Resource Script文件 #include "stdio.h" #include <windows.h> #include <tchar.h> #include "resource.h" typedef HWND (WINAPI * GETCONSOLEPROC)(); HWND GetConsole() { HWND hRet(NULL); BOOL bLoad(FALSE); HMO

为程序设置多语言界面——C#

考虑到程序的国际化需求,需要为程序设置多语言界面. 1,新建一个资源文件,名字可以是对应界面+语言代码(MainForm.zh-CN).这样资源文件就会自动添加到对应界面下面. 2,更改界面属性Localizable为Ture 3,调用相关的资源文件,为相关控件赋值 System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language); if (form !=

如何编写程序设置Android来电铃声

我们在拿到新手机后通常会为其设置来年铃声,那么怎样通过代码来设置Android来电铃声,本文就为大家实例讲解下. 1.如果读到的是音频文件路径,需要先将音乐文件插入到多媒体库. Java代码 //设置--铃声的具体方法 public void setMyRingtone(String path) { File sdfile = new File(path); ContentValues values = new ContentValues(); values.put(MediaStore.Med

iOS 开发指南 第12章 应用程序设置

1 概述 设置中的项目在应用中是不经常变化的,它决定了应用的基本特征和行为. 配置是在应用内部开辟出来的功能块,是应用的一部分,项目是经常变化的. 2 应用程序设置包 Settings Bundle是一个包文件,其中含有设置界面中所需的项目的描述 用到的照片 文字的本地化 子设置项目的描述等内容.通过finder打开. Root.plist文件描述根设置界面中设置的项目信息. en.lproj文件夹和Root.strings文件是和本地化有关,用于设置界面信息的本地化. 创建:iOS-Resou

Linux GUI程序设置鼠标位置

Linux GUI程序设置鼠标位置 ? 示例代码: Display *dpy; Window root_window; ? dpy = XOpenDisplay(0); root_window = XRootWindow(dpy, 0); XSelectInput(dpy, root_window, KeyReleaseMask); XWarpPointer(dpy, None, root_window, 0, 0, 0, 0, 100, 100); XFlush(dpy);