在实际应用中,常常需要应用程序能保存程序的状态以及用户的设置,如应用程序显示的大小、位置、背景颜色或用户设置参数等信息,以便下次运行程序时,能保持上次关闭的状态。
Qt提供的QSettings类能很方便地实现保存程序设置的需求。当创始一个QSettings对象时,必须传递公司名或组织名以及应用程序名称,如下所示:
QSettingssettings("MySoft", "Star Runner");
如果在应用程序的多个地方用到QSettings,可以使用QCoreApplication::setOrganizationName()和QCoreApplication::setApplicationName()来指定组织名和应用程序名。这样,就可以使用QSettings的默认构造函数了。如下所示:
QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft.com");
QCoreApplication::setApplicationName("StarRunner");
...
QSettingssettings;
保存一个设置方法如下:
settings.setValue("editor/wrapMargin",68);
它指定了一个设置的键(QString)和一个与之关联的数据(QVariant)。
读取一个设置的方法如下:
intmargin = settings.value("editor/wrapMargin").toInt();
上述语句将返回与键关联的数据,如果没有与该键关联的数据,则返回值为空。
intmargin = settings.value("editor/wrapMargin", 80).toInt();
上述语句提供了一个默认值,即当没有与键关联的数据时,返回默认值。
关于段和键的语法
可以构造层次化的键值,使用’/’作为分隔符,类似于Unix文件路径,如:
settings.setValue("mainwindow/size",win->size());
settings.setValue("mainwindow/fullScreen",win->isFullScreen());
settings.setValue("outputpanel/visible",panel->isVisible());
如果保存或恢复的设置的键值拥有相同的前缀,那么可以使用beginGroup()和endGroup(),代码如下所示:
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();