程序启动读取和关闭时保存应用程序设置(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());
}
http://www.cnblogs.com/cy568searchx/p/3653390.html
程序启动读取和关闭时保存应用程序设置(QSettings)的更多相关文章
- QSettings 使用实例 当需要在程序关闭时保存”状态“信息
用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位置,一些别的设置,还有一个经常用的,就是recent files,等等这些都可以通过Qsettings来实现. 我们知 ...
- (转)用webbrowser做的网站登陆程序,如何获取cookie并且保存在程序中 (IE8有效) ,用途嘛,你懂的。
今天帮朋友做了个工具,用webbrowser做的,用户使用用户名密码登陆网站后,需要在后台下载和分析一些页面. 分析页面使用的是htmlparser .net版 里面唯一需要解决的问题是,登陆后的co ...
- qt 程序启动参数 -qws (转至 MrTXK
运行嵌入式程序 在嵌入式QT版本中,程序需要服务器或自己作为服务器程序.服务器程序构造的方法是构造一个QApplication::GuiServe类型的QApplication对象.或者使用-qws命 ...
- qt 程序启动参数 -qws
运行嵌入式程序 在嵌入式QT版本中,程序需要服务器或自己作为服务器程序.服务器程序构造的方法是构造一个QApplication::GuiServe类型的QApplication对象.或者使用-qws命 ...
- 启动MFC程序的时候报错:0xC0000005: 读取位置 0x00000000 时发生访问冲突
此程序的结构是 MouseCap.h #pragma once #include <afxwin.h> class MouseCapApp : public CWinApp { publi ...
- 如何在ASP.NET Core程序启动时运行异步任务(1)
原文:Running async tasks on app startup in ASP.NET Core (Part 1) 作者:Andrew Lock 译者:Lamond Lu 背景 当我们做项目 ...
- Qt启动子进程,子进程关闭时通知主进程,实现主进程对子进程的管理
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.需求描述 Qt主进程启动 ...
- VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)
之前写的一个VC应用程序,是程序启动时就直接出现在任务栏, 窗体不出现,等用户点击任务栏图标再出现窗口.和一些防火墙什么的软件类似. 这种效果实现并不是很困难的,硬是找不到最好的.为什么呢? 首先,在 ...
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
在自学杨中科老师的视频教学时,拓展编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时 会产生Additional information: 阅读器关闭时尝试调用 ...
随机推荐
- BZOJ 4145: [AMPPZ2014]The Prices( 状压dp + 01背包 )
我自己只能想出O( n*3^m )的做法....肯定会T O( nm*2^m )做法: dp( x, s ) 表示考虑了前 x 个商店, 已买的东西的集合为s. 考虑转移 : 先假设我们到第x个商店去 ...
- CentOS6.5 配置防火墙+允许指定ip访问端口
参考博文: iptables防火墙只允许指定ip连接指定端口.访问指定网站 一.配置防火墙 打开配置文件 [root@localhost ~]# vi /etc/sysconfig/iptables ...
- SVN的trunk、branch、tag(二)
转——简单的对比 SVN的工作机制在某种程度上就像一颗正在生长的树: 一颗有树干和许多分支的树 分支从树干生长出来,并且细的分支从相对较粗的树干中长出 一棵树可以只有树干没有分支(但是这种情况不会持续 ...
- windows phone8手机玩玩
背景介绍 北京移动在搞活动,预存话费赠手机活动,因此办理了一个,来玩新手机了. 上手一周了,白色的手机,对我来说配置凑合,主要是想学习wp8手机的开发,这样也有个样机玩玩.开发人员就是这么的喜欢玩. ...
- 泛虚拟化技术(以Xen为例)
一.概述 最主要的特点是:修改Guest OS的内核代码.通过修改内核,使Guest OS明白自己是运行在R-1,不要直接去运行特权指令,如果要运行就去Hypercall(主动VMM陷入). ...
- Android基础总结(精华完整版)
1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速率一般在几百Kbps,较之前的2G和2.5G在数据传输速度上有很大提升. Ÿ 第四代移动通信技术( ...
- Hadoop源代码导入Eclipse
须要进一步学习hadoop.须要看看内部源代码实现.因此须要将hadoop源代码导入都eclipse中,简单总结一下,详细过程例如以下: 首先确保已经安装了git.maven3.protobuf2.5 ...
- 13-(1-4)进程管道关于popen(-r-w)及pipe的程序使用实例
#include<unistd.h> #include<stdlib.h> #include<stdio.h> #include<string.h> # ...
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点-----层序遍历的应用题
题目:对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点:如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL:给出程序实现,并分析时间复杂度和空间复杂度. ...
- Swift - iOS应用的国际化与本地化
在Xcode中我们可以很方便的将APP适配各种本地化语言.苹果的框架已经帮我们把不同语言的数据分离开,包括图片,声音,视频,文档,用户界面文字(甚至代码中编写的用户界面文字),它们会被建立在同一个bu ...