保存应用程序设置(QSettings)
1.QSettings类
QSettings提供保存应用程序当前设置的接口,可以方便地保存程序的状态,例如窗口大小和位置,选项的选中状态等等。
在Windows系统中,程序程序的状态信息记录在注册表中;在MacOSX系统上,这些信息记录在XML配置文件中;在Unix系统中,则使用INItext文件记录。QSettings则是对这些技术的一个抽象,使得保存和取得应用程序的设置状态的只得独立于操作系统。
QSettings的API是基于QVariant类,当创建一个QSettings对象时,必须传递公司或组织的名称(QString)和应用程序的名称(QString)用于构造一个QSettings对象。
2.使用QSettings
(1)构造一个QSettings对象
QSettingssettings("MySoft","StarRunner");
(2)添加一个设置到settings中
程序的设置是以“key-value”的形式,保存在QSettings对象中的。其中,key由一个QString类型定义,value是由QVariant类型定义:
settings.setValue("editor/wrapMargin",68);
/*wrapMargin是一个子key
/*如果存在相同的key,那么已存在的key所对应的值将由新值代替
(3)从setttings中取出设置
同时也可以通过key从settings中取出值:
intmargin=settings.value("editor/wrapMargin").toInt();
3.QSettings的组织方式
(1)用“/”表示子key
QSettings存储状态信息的形式是key-value,其中key与文件路径这个概念是类似的,subkey可以用定义文件路径的形式定义,例如findDialog/matchCase,其中matchCase就是一个subkey;
(2)使用beginGroup()和endGroup()
voidQSettings::beginGroup(constQString&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
QStringListQSettings::childKeys()const函数返回所有顶层keys,组成一个QStringList作为一个返回值。例如:
QSettingssettings;
settings.setValue("fridge/color",Qt::white);
settings.setValue("fridge/size",QSize(32,96));
settings.setValue("sofa",true);
settings.setValue("tv",false);
QStringListkeys=settings.childKeys();
那么这个keys中看上去应该是这样的:
keys:["sofa","tv"]
QStringListQSettings::childGroups()const是返回所有包含有key的顶层groups,组成一个QStringList作为返回值:
QSettingssettings;
settings.setValue("fridge/color",Qt::white);
settings.setValue("fridge/size",QSize(32,96));
settings.setValue("sofa",true);
settings.setValue("tv",false);
QStringListgroups=settings.childGroups();
则groups看上去是:
groups:["fridge"]
4.保存和取得程序的设置
(1)在主窗口的构造函数中,readSettings()
voidMainWindow::readSettings()
{
QSettingssettings("SoftwareInc.","Spreadsheet");//写入与读取的settings要一致
restoreGeometry(settings.value("geometry").toByteArray());
recentFiles=settings.value("recentFiles").toStringList();
updateRecentFileActions();
boolshowGrid=settings.value("showGrid",true).toBool();
showGridAction->setChecked(showGrid);
boolautoRecalc=settings.value("autoRecalc",true).toBool();
autoRecalcAction->setChecked(autoRecalc);
}
(2)在关闭主窗口时,writeSettings()
voidMainWindow::writeSettings()
{
QSettingssettings("SoftwareInc.","Spreadsheet");
settings.setValue("geometry",saveGeometry());
settings.setValue("recentFiles",recentFiles);
settings.setValue("showGrid",showGridAction->isChecked());
settings.setValue("autoRecalc",autoRecalcAction->isChecked());
}
/*这
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。