QSettings配置ini文件,ReadArray、WriteArray读写一组系列数据

#include <QSettings>
#include <QPointF>

typedef struct tag_Login{
    QString userName;
    QString password;
    QPointF pos;
}Login;

Login Create_mapping_func(const QString &userName,const QString &password,const QPointF &pos)
{
    Login temp;
    temp.userName = userName;
    temp.password = password;
    temp.pos 	  = pos;
    return temp;
}

int main(int argc, char *argv[])
{
    QList<Login> logins;

    logins.push_back(Create_mapping_func("test1","123456",QPointF(0.0,1.1)));
    logins.push_back(Create_mapping_func("test2","000000",QPointF(1.5,2.2)));
    logins.push_back(Create_mapping_func("test3","111111",QPointF(2.4,3.6)));
    logins.push_back(Create_mapping_func("test4","123123",QPointF(3.9,4.0)));

    QSettings settings("./myapp.ini",QSettings::IniFormat);
    settings.beginWriteArray("logins");
    for (int i = 0; i < logins.size(); ++i) {
        settings.setArrayIndex(i);
        settings.setValue("userName", logins.at(i).userName);
        settings.setValue("password", logins.at(i).password);
        settings.setValue("pos",logins.at(i).pos);
    }
    settings.endArray();

    int size = settings.beginReadArray("logins");
    for (int i = 0; i < size; ++i) {
        settings.setArrayIndex(i);
        Login login;
        login.userName 	=	settings.value("userName").toString();
        login.password 	=	settings.value("password").toString();
        login.pos 		=	settings.value("pos").toPointF();
        logins.append(login);
    }
    settings.endArray();

    foreach(Login s,logins){
        qDebug()<<"userName:"<<s.userName<<" password:"<<s.password<<" pos:("<<s.pos.x()<<","<<s.pos.y()<<")";
    }
}

运行结果:

userName: "test1"  password: "123456"  pos:( 0 , 1.1 )
userName: "test2"  password: "000000"  pos:( 1.5 , 2.2 )
userName: "test3"  password: "111111"  pos:( 2.4 , 3.6 )
userName: "test4"  password: "123123"  pos:( 3.9 , 4 )
userName: "test1"  password: "123456"  pos:( 0 , 1.1 )
userName: "test2"  password: "000000"  pos:( 1.5 , 2.2 )
userName: "test3"  password: "111111"  pos:( 2.4 , 3.6 )
userName: "test4"  password: "123123"  pos:( 3.9 , 4 )

myapp.ini

[logins]
1\userName=test1
1\password=123456
2\userName=test2
2\password=000000
3\userName=test3
3\password=111111
4\userName=test4
4\password=123123
size=4
1\pos=@Variant(\0\0\0\x1a\0\0\0\0\0\0\0\0?\xf1\x99\x99\x99\x99\x99\x9a)
2\pos=@Variant(\0\0\0\x1a?\xf8\0\0\0\0\0\0@\x1\x99\x99\x99\x99\x99\x9a)
3\pos=@Variant(\0\0\0\x1a@\x3\x33\x33\x33\x33\x33\x33@\f\xcc\xcc\xcc\xcc\xcc\xcd)
4\pos=@Variant(\0\0\0\x1a@\xf\x33\x33\x33\x33\x33\x33@\x10\0\0\0\0\0\0)

 

QSettingsQt 框架中提供的一个简单的读写配置文件的类。它可以用来读写不同格式的配置文件,包括 ini、XML、注册表等等。在这里,我们介绍一下如何使用 QSettings读写 ini 文件。 在使用 QSettings读写 ini 文件之前,需要先创建一个 QSettings 对象,并指定要读写配置文件的路径和格式。在本例中,我们假设配置文件的路径为 config.ini,格式为 ini。代码如下: ```cpp QSettings settings("config.ini", QSettings::IniFormat); ``` 接下来,我们可以使用 setValue() 和 value() 函数来写入和读取配置项。例如,我们可以将一个字符串写入配置文件中: ```cpp settings.setValue("name", "John"); ``` 接着,我们可以使用 value() 函数来读取这个配置项: ```cpp QString name = settings.value("name").toString(); ``` 如果配置项不存在,value() 函数会返回一个空值,因此我们需要使用默认值来避免程序出错。例如,我们可以使用下面的代码来读取一个整数配置项,如果配置项不存在,则返回默认值 100: ```cpp int value = settings.value("number", 100).toInt(); ``` 最后,需要注意的是,在使用完 QSettings 对象后,应该调用 sync() 函数将数据写入到文件中: ```cpp settings.sync(); ``` 完整的读写 ini 文件的示例代码如下: ```cpp #include <QSettings> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); // 创建 QSettings 对象 QSettings settings("config.ini", QSettings::IniFormat); // 写入配置settings.setValue("name", "John"); settings.setValue("age", 30); // 读取配置项 QString name = settings.value("name").toString(); int age = settings.value("age", 0).toInt(); // 输出配置项 qDebug() << "Name:" << name; qDebug() << "Age:" << age; // 同步数据文件settings.sync(); return app.exec(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值