QSettings的基本使用详解(一)




QSettings的基本使用详解(一)

**前两个例子Copy连接:http://blog.csdn.net/xwdpepsi/article/details/8523080

Qt写ini文件

   
   
  1. #include <QtCore/QCoreApplication>
  2. #include <QSettings>
  3. int main(int argc, char argv[])
  4. {
  5. QCoreApplication a(argc, argv);
  6. //Qt中使用QSettings类读写ini文件
  7. //QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省
  8. QSettings configIniWrite = new QSettings("hahaya.ini", QSettings::IniFormat);
  9. //向ini文件中写入内容,setValue函数的两个参数是键值对
  10. //向ini文件的第一个节写入内容,ip节下的第一个参数
  11. configIniWrite->setValue("/ip/first", "192.168.0.1");
  12. //向ini文件的第一个节写入内容,ip节下的第二个参数
  13. configIniWrite->setValue("ip/second", "127.0.0.1");
  14. //向ini文件的第二个节写入内容,port节下的第一个参数
  15. configIniWrite->setValue("port/open", "2222");
  16. //写入完成后删除指针
  17. delete configIniWrite;
  18. return a.exec();
  19. }

Qt读ini文件

   
   
  1. #include <QtCore/QCoreApplication>
  2. #include <QSettings>
  3. #include <QString>
  4. #include <QDebug>
  5. int main(int argc, char argv[])
  6. {
  7. QCoreApplication a(argc, argv);
  8. QSettings configIniRead = new QSettings("hahaya.ini", QSettings::IniFormat);
  9. //将读取到的ini文件保存在QString中,先取值,然后通过toString()函数转换成QString类型
  10. QString ipResult = configIniRead->value("/ip/second").toString();
  11. QString portResult = configIniRead->value("/port/open").toString();
  12. //打印得到的结果
  13. qDebug() << ipResult;
  14. qDebug() << portResult;
  15. //读入入完成后删除指针
  16. delete configIniRead;
  17. return a.exec();
  18. }

基本使用(PS:后面有些地方是使用组织代替公司的)
创建 QSettings 对象QSetting(“公司名字”,”程序名字”),这决定了你的配置文件所在的路径与名字,公司名字使用公司域名(这在某些平台下是种惯例如IOS);同时它可以创建在堆或栈上,因为它的创建和破坏是十分快的.
存储是一种键值对的方式
   
   
  1. settings.setValue("editor/wrapMargin", 68);
如果使用了新值覆盖旧值可能无法立即同步至文件,可调用 sync () 提交你的修改(同时能更新至正在使用同一个文件的Setting)
双参数,无值则返回默认值
   
   
  1. int margin = settings.value("editor/wrapMargin", 80).toInt();
居然连 QColor , QImage , and QPixmap 这些都能存
   
   
  1. QSettings settings("MySoft", "Star Runner");
  2. QColor color = palette().background().color();
  3. settings.setValue("DataPump/bgcolor", color);
不过 QVariant 是Qt核心组件不提供转换成 QColorQImage , and  QPixmap 的方法,即无 toColor() , toImage() , or toPixmap() 方法
为此我们可以使用它提供的模板方法 QVariant::value () 去转换
   
   
  1. QSettings settings("MySoft", "Star Runner");
  2. QColor color = settings.value("DataPump/bgcolor").value<QColor>();
想存储自定义的类型?去看看这个吧 qRegisterMetaType () and qRegisterMetaTypeStreamOperators () 真
为了可移植,不同平台下规则不同,所以我们要去遵守一些规则(Key在windows大小写不敏感,IOS敏感之类的不同)
1.配置文件中的大小写和代码中大小写同一,不要ini中key为inta,代码中用INTA去读取
2.不要存两个Key然后这两个key只是大小写不同(没人这么变态的吧,有的话,他一定和这个项目有仇)
3.不要使用斜杠在节点或key的名字中,反斜杠(‘/’)会被用于分割,windows的(‘\’)会被QSettings转成(‘/’);
想一次指定多个key具有相同前缀吗?Qt妥妥的为我们提供了 beginGroup () and   endGroup ()
   
   
  1. settings.beginGroup("mainwindow");//定义组前缀
  2. settings.setValue("size", win->size());
  3. settings.setValue("fullScreen", win->isFullScreen());
  4. settings.endGroup();//结束组
  5. settings.beginGroup("outputpanel");
  6. settings.setValue("visible", panel->isVisible());
  7. settings.endGroup();
还有类似”数组”的概念,将配置文件中的数据读出与写入
先看读的吧
   
   
  1. struct Login {
  2. QString userName;
  3. QString password;
  4. };//定义结构体
  5. QList<Login> logins;//定义结构体类型的容器
  6. ...
  7. QSettings settings;
  8. int size = settings.beginReadArray("logins");//获取logins节点的键值对数量
  9. for (int i = 0; i < size; ++i) {//知道数量遍历就妥妥的
  10. settings.setArrayIndex(i);//定位键值对
  11. Login login;
  12. login.userName = settings.value("userName").toString();
  13. login.password = settings.value("password").toString();
  14. logins.append(login);
  15. }
  16. settings.endArray();
写呢(和读差不多诶)
   
   
  1. struct Login {
  2. QString userName;
  3. QString password;
  4. };
  5. QList<Login> logins;
  6. ...
  7. QSettings settings;
  8. settings.beginWriteArray("logins");
  9. for (int i = 0; i < logins.size(); ++i) {
  10. settings.setArrayIndex(i);
  11. settings.setValue("userName", list.at(i).userName);
  12. settings.setValue("password", list.at(i).password);
  13. }
  14. settings.endArray();
Fallback机制(我也不知道这个要怎么翻译)
作用:当在指定区域中寻找不到这个key时会去其他地方找(总共也就4个地方,寻找地方的多少取决于你初始化的参数)
   
   
  1. QSettings obj1("MySoft", "Star Runner");
  2. QSettings obj2("MySoft");
  3. QSettings obj3(QSettings::SystemScope, "MySoft", "Star Runner");
  4. QSettings obj4(QSettings::SystemScope, "MySoft");

Locations

(X:首选位置,O:后备搜索位置)

obj1

(包含组织与程序名)

obj2(只有组织)obj3(限定了系统)obj4

1. User, Application(指定程序位置)

X


2. User, Organization(指定组织下的所有程序位置)

OX

3. System, Application(系统中指定程序的位置)

O
X

4. System, Organization(系统中指定组织下的所有程序位置)

OOOO

英文不好,不知道会不会理解有问题,有的话欢迎指出.

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值