版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接和本声明。
本文连接:https://blog.csdn.net/wokaowokaowokao12345/article/details/78409385html
本文转载自以上博客,侵删c++
在软件的使用过程当中,有些用户有特定的习惯,如:窗口大小、参数设置、文件打开的方式等。当下次启动软件时候,用户每每但愿设置和上次的同样,所以咱们须要有一个文件来保存用户的一些偏好信息,在程序从新启动的时候再进行偏好设置。固然咱们能够本身记录并保存用户的习惯,下次启动应用的时候读取就好。windows
可是,Qt给开发者提供了QSetting类。容许开发者建立一个配置文件或者操做注册表,还能够指定配置文件的位置和下次读取,恢复用户的上次设置。函数
QSetting是一个平台无关的能够设置和读取应用程序设置的类。因为笔者是在windows环境下作软件开发,因此这个博客中的例子以windows平台进行测试。测试
使用以前先导入库ui
#include <QSettings>
在建立QSetting对象时,应该把公司或组织,还有应用程序的名字传递给构造函数,例如,若是应用程序叫作Star Runner,公司叫作MySoft,那么应该像下面这样构造对象.net
QSettings settings("MySoft","Star Runner");
QSetting由键和值组成,使用QString指定键(key)的名字,使用QVariant来存储和键相关联的值。使用setValue(),设定值。例如:unix
settings.setValue(“editor/warpMargin”,68);
若是已经存在了同名的键,那么新的值会覆盖原来的值,使用value()函数获取setting的值。例如:code
int margin=settings.value(“editor/warpMargin”).toInt();
若是没有指定的key,那么value()会返回一个Null QVariant,也能够为value()指定一个缺省的值,例如:htm
int margin=settings.value(“editor/warpMargin,80).toInt();
缺省值就是80,value() 返回的值是一个QVariant,把他转换成int类型。
使用“/”做为分隔符,而不是“\”。例如:
settings.setValue("mainwindow/size", win->size()); settings.setValue("mainwindow/fullScreen", win->isFullScreen()); settings.setValue("outputpanel/visible", panel->isVisible()); settings.endGroup();
在关闭应用程序时候保存应用程序窗口的大小和位置,在再次打开应用程序时候,读取出来。
保存:
void MainWindow::writeSettings() { QSettings settings("Moose Soft", "Clipper"); settings.beginGroup("MainWindow"); settings.setValue("size", size()); settings.setValue("pos", pos()); settings.endGroup(); }
读取:
void MainWindow::readSettings() { QSettings settings("Moose Soft", "Clipper"); settings.beginGroup("MainWindow"); resize(settings.value("size", QSize(400, 400)).toSize()); move(settings.value("pos", QPoint(200, 200)).toPoint()); settings.endGroup(); }
在构造函数中调用readSetting(),在关闭窗口事件中调用writeSettings()
MainWindow::MainWindow() { ... readSettings(); } void MainWindow::closeEvent(QCloseEvent *event) { if (userReallyWantsToQuit()) { writeSettings(); event->accept(); } else { event->ignore(); } }
settings.clear();
在保存默认设置的时候,建议添加默认值,若是未添加软件在第一次运行时,参数等设置所有混乱!
默认参数设置以下。
ui.radioButtonC1->setChecked(settings.value("radioButtonC1", false).toBool()); ui.lineEditZDName->setText(settings.value("lineEditZDName", "ZD").toString()); ui.checkBoxZD->setChecked(settings.value("checkBoxZD", true).toBool()); ui.timeEditStart->setTime(settings.value("timeEditStart", QTime(8, 35, 06)).toTime()); ui.spinBoxTimeLable->setValue(settings.value("spinBoxTimeLable", 1).toInt());
参考
http://blog.chinaunix.net/uid-11765716-id-3181163.html
http://blog.csdn.net/u011512437/article/details/43927321