功能作用:
能够提供持久的平台无关的应用配置,主要有两方面内容:
1.持久存储应用的配置,例如窗体信息、位置、用户登录时的账号等等,window下可以选择存储在注册表或者ini文件中。
2.平台无关性,就是说开发者不需要担心不同平台的存储问题,底层会根据不同操作系统存储适当位置。
简单使用:
a.写入注册表:
void MainWindow::writeSettings()
{
//可以将settings对象设置为单例,避免每次使用时都要创建相同参数的对象
//Moose Soft: 公司名称
//QSettingsTest:程序名称
QSettings settings("Moose Soft", "QSettingsTest");
settings.setValue("editor",68);
QColor color(123,44,33);
settings.setValue("color",color);
//如果程序存在多个界面、逻辑组,则可以使用beginGroup来区分不同组的数据
settings.beginGroup("mainwindowInfo");
settings.setValue("window/size",size());
settings.setValue("window/point",this->pos());
settings.endGroup();
}
开发者可以在需要保存配置的时候调用写操作,将配置保存于注册表中(ini文件也行),如果想知道存储在哪里可以调用成员函数fileName(),然后通过window搜索注册表:
打开后根据调用fileName()函数的字符串信息进行查找:存储结构如下:
b.读取注册表中的信息:
void MainWindow::readSettings()
{
QSettings settings("Moose Soft", "QSettingsTest");
settings.beginGroup("mainwindowInfo");
QSize size = settings.value("window/size").toSize();
resize(size);
QPoint point= settings.value("window/point").toPoint();
qDebug()<<settings.fileName();
move(point);
settings.endGroup();
}
应用规范:
以上代码是一些测试函数,因此没有考虑实际的代码规范等,使用的时候主要注意的点有:
1.QSettings对象单例化,避免重复创建
2.存储的value字符串统一写在一个命名空间里,并定义在cpp文件中,声明在头文件中:
//***.cpp
const QString MainWindowInfo = QStringLiteral("mainWidnowInfo");
...
//***.h
extern QString MainWindowInfo;
...
一点思考:
QSettings属于工具类的东西,我觉得没有必要非得去记住它,如果查阅它的文档时会发现里面有各种各样的函数,记住了也没有什么意义,如果非要记,应该首先记住它的作用,然后记住它的基本用法,心里有个大概的概念,最后可以尝试去查阅它的源码,记住它实现的思想。轮子没有必要重复造,上次有人问我connect的两种用法以及第五个参数ConnectionType的区别,额。。我也是一脸懵逼,因为之前有注意过但确实是没有深入的去看,拿一把枪只知道扣扳机,不知道枪口的位置,容易误伤自己,因此在用到一个东西的时候首先你得明白它的作用到底是什么,有什么注意的事项,这样在出一些问题的时候你就能够大概推测问题所在。同时等了解它的所有功能了,再去思考是否去挖掘更深的东西,如底层实现,周边拓展技术等等。