QSettings 的排序问题:会导致 key被重新按照字母排序 (**)

自定义:QSettings 的排序方法 (***)

使用QSetting修改配置文件后保存

-------------------------------------------------

希望:

key的顺序,按照写入的顺序排列。

测试条件:

debian /win采用相同的代码。

现象:

debian:key的顺序,按照 unicode顺序排列。NG。

win:key的顺序,按照写入的顺序排列。OK。

-----------------------------

目的:key 不希望按照字母的顺序,进行排序。

qt 的 key,是可以按照用户自定义的方式进行排序的。

但是,QSettings 读写不当,会导致 key被重新按照字母排序。

好像在使用 toUtf8 之类的语句时,会造成重新排序?

Qt之QSettings 变相解决自动排序问题

  https://blog.csdn.net/Ilson_/article/details/130095951

Transport QVariant like QSettings does [solved]

  Transport QVariant like QSettings does [solved] | Qt Forum

Qt中的QSettings 自动排序问题解决方案

  https://blog.csdn.net/2301_79366106/article/details/132328748

 

qsettings 保存自定义结构体(QVariant与自定义结构体相互转化)

  https://www.cnblogs.com/findumars/p/5364672.html

 

============================

自定义:QSettings 的排序方法 (***)

///源码:

  

    QSettings *settings = new QSettings("./setting.ini",QSettings::IniFormat);
    settings->beginGroup("77_KEY");
    settings->setValue("777","77 77777777");
    settings->endGroup();

    settings->beginGroup("WW_KEY");
    settings->setValue("WWWW","ww 444444444");
    settings->endGroup();

    settings->beginGroup("NN_KEY");
    settings->setValue("nnnn","nn 111111111");
    settings->endGroup();

    settings->beginGroup("MAIN");
    settings->setValue("cc_TITLE","cc-ccccccccc");
    settings->endGroup();

    settings->beginGroup("MAIN");
    settings->setValue("b_TITLE","bbbbbbbbbbb");
    settings->endGroup();

    settings->beginGroup("MAIN");
    settings->setValue("dd_TITLE","dd-ddddddd");
    settings->endGroup();

    settings->beginGroup("MAIN");
    settings->setValue("a_TITLE","aaaaaaaaaaa");
    settings->endGroup();

    settings->beginGroup("PP_KEY");
    settings->setValue("pppp","pp 22222222");
    settings->endGroup();

    settings->beginGroup("66_KEY");
    settings->setValue("666","66 66666666");
    settings->endGroup();

//在 setting.ini文件中的排列顺序

   

[77_KEY]
777=77 77777777

  

[WW_KEY]
WWWW=ww 444444444

  

[NN_KEY]
nnnn=nn 111111111

  

[MAIN]
cc_TITLE=cc-ccccccccc
b_TITLE=bbbbbbbbbbb
dd_TITLE=dd-ddddddd
a_TITLE=aaaaaaaaaaa

  

[PP_KEY]
pppp=pp 22222222

  

[66_KEY]
666=66 66666666

说明:

1. key按照写入的先后排序,这是用户期望的,OK。

2.

使用QSetting修改配置文件后保存

参考链接:
https://stackoverflow.com/questions/16203853/qsettings-reading-ini-file/16224318#16224318
https://doc.qt.io/qt-5/qsettings.html

1:QSetting生成一个配置文件

void write_config()
{
    QSettings setting("config.ini", QSettings::IniFormat);

    setting.beginGroup("group1");
    setting.setValue("name", "zhangsan");
    setting.setValue("age", 22);
    setting.endGroup();

    setting.beginGroup("group2");
    setting.setValue("book", "The Old Man and the Sea");
    setting.setValue("year", 1952);
    setting.endGroup();
}

2:QSetting读取配置文件

void read_config()
{
    QSettings setting("config.ini", QSettings::IniFormat);
    std::string name = setting.value("group1/name").toString().toStdString();
    int year = setting.value("group2/year").toInt();

    cout << __FUNCTION__ << ", name:" << name << "  year:" << year << endl;
}

3:QSetting修改配置文件

调用setting.sync();后才能将修改的部分更新到磁盘文件中

void modify_config()
{
    QSettings setting("config.ini", QSettings::IniFormat);
    setting.setValue("/group1/name", "lisi");
    setting.sync();  //写入配置文件
}

4:显示配置文件内容

在这里插入图片描述

5:完整代码

#include <iostream>
#include <qsettings.h>
using namespace std;

void write_config()
{
    QSettings setting("config.ini", QSettings::IniFormat);

    setting.beginGroup("group1");
    setting.setValue("name", "zhangsan");
    setting.setValue("age", 22);
    setting.endGroup();

    setting.beginGroup("group2");
    setting.setValue("book", "The Old Man and the Sea");
    setting.setValue("year", 1952);
    setting.endGroup();
}

void read_config()
{
    QSettings setting("config.ini", QSettings::IniFormat);
    std::string name = setting.value("group1/name").toString().toStdString();
    int year = setting.value("group2/year").toInt();

    cout << __FUNCTION__ << ", name:" << name << "  year:" << year << endl;
}

void modify_config()
{
    QSettings setting("config.ini", QSettings::IniFormat);
    setting.setValue("/group1/name", "lisi");
    setting.sync();//写入配置文件
}

int main(int argc, char *argv[])
{
    write_config();
    read_config();

    modify_config();
    read_config();

    return 0;
}

————————————————
版权声明:本文为CSDN博主「qq_29022265」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29022265/article/details/104734496

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值