自定义: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