配置文件在qt中被覆盖

配置文件在qt中被覆盖,qt,config,Qt,Config,我正在使用以下代码将数据写入配置文件 QSettings settings("/root/configFile.ini",QSettings::IniFormat); QString userName = lineEditUsername.text(); QString password = lineEditPassword.text(); QList<QString> listUsername; QList<QString> listP

我正在使用以下代码将数据写入配置文件

   QSettings settings("/root/configFile.ini",QSettings::IniFormat);

   QString userName = lineEditUsername.text();
   QString password = lineEditPassword.text();

   QList<QString> listUsername;
   QList<QString> listPassword;

   settings.beginWriteArray("UserData");

   for(i=0;i<listUsername.size();i++)
  {
      Qstring user = listUsername.at(i);         
      Qstring pass = listPassword.at(i);

      settings.setArryIndex(i);
      settings.setValue("Username",user);
      settings.setValue("Password",pass);
   }

  settings.endArray();
 }
QSettings设置(“/root/configFile.ini”,QSettings::ini格式);
QString用户名=lineEditUsername.text();
QString password=lineEditPassword.text();
QList列表用户名;
QList-listPassword;
settings.beginWriteArray(“用户数据”);

对于(i=0;i,在添加新条目之前,需要检索现有条目的数量。类似如下:

int size = settings.beginReadArray( "UserData" );
settings.endArray();

settings.beginWriteArray( "UserData" );
settings.setArrayIndex( size );  // Note: Maybe 'size - 1', not  sure

// ...
settings.endArray();
[..]
QVariant v = settings.value("UserData");
QVariantMap map = v.value<QVariantMap>();
QMapIterator<QString, QVariant> i(map);
while (i.hasNext()) {
    i.next();
    QString user = i.key();
    QString pass = i.value().toString();
}

将数组索引移到末尾,因此不再覆盖现有条目,而不是创建和维护数组和索引,我建议创建用户凭据映射并将其存储在设置文件中,如下所示:

QSettings settings("/root/configFile.ini", QSettings::IniFormat);

QString userName = lineEditUsername.text();
QString password = lineEditPassword.text();

QList<QString> listUsername;
QList<QString> listPassword;

//settings.beginWriteArray("UserData");

QVariantMap userDataMapping;

for(int i = 0; i < listUsername.size() ; i++)
{
    QString user = listUsername.at(i);         
    QString pass = listPassword.at(i);

    userDataMapping[user] = pass;

    //settings.setArryIndex(i);
    //settings.setValue("Username",user);
    //settings.setValue("Password",pass);
}

// Store the mapping.
settings.setValue("UserData", userDataMapping);

//settings.endArray();
// ...
阅读设置时,请执行以下操作:

int size = settings.beginReadArray( "UserData" );
settings.endArray();

settings.beginWriteArray( "UserData" );
settings.setArrayIndex( size );  // Note: Maybe 'size - 1', not  sure

// ...
settings.endArray();
[..]
QVariant v = settings.value("UserData");
QVariantMap map = v.value<QVariantMap>();
QMapIterator<QString, QVariant> i(map);
while (i.hasNext()) {
    i.next();
    QString user = i.key();
    QString pass = i.value().toString();
}
[…]
QVariant v=settings.value(“用户数据”);
QVariantMap=v.value();
qmapiteratori(map);
while(i.hasNext()){
i、 next();
QString user=i.key();
QString pass=i.value().toString();
}

但是如果我有更多的数据要添加到配置文件中,比如他们的角色,我将无法正确添加?@user2548968,我不明白你的意思。请澄清你的问题。什么是“角色”以及你要添加什么样的数据?我尝试过使用这种方法。我想添加额外的功能,所以我又使用了一个QVariant,并对其进行了同样的操作它。然而,当阅读它时,却意外地完成了。角色就像假设它是一个学校数据库,并且一个学生正在登录,那么他将不得不将角色定义为学生,同样地,定义为教师和校长。因此,即使是这样,也必须通过配置文件。我将从组合框中将此值作为QString。@user2548968,我已经修复了e上面的代码:
i.next()
应该在
i.key()之前调用。