【问题标题】:Config File Overwritten in Qt在 Qt 中覆盖的配置文件
【发布时间】:2013-10-18 04:02:03
【问题描述】:
I am creating a config file which stores username, password and role of certain user. I am using the following code.

void MainWindow::OnAssignButtonClicked()
{
   QSettings settings("/root/configFile.ini", QSettings::IniFormat);

   QString userName = lineEditUsername.text();
   QString password = lineEditPassword.text();
   QString Role = comboBox.currentText();

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

  QVariantMap userPasswordMapping;
  QVariantMap userRoleMapping;

  listUsername << userName;
  listPassWord << Password;
  listRole << Role;

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

   userPasswordMapping[user] = pass;
   userRoleMapping[user] = role;
  }

 // Store the mapping.
  settings.setValue("Password", userPasswordMapping);
  settings.setValue("Role",userRoleMapping);

}

读取值时

 QVariant variantPassword = settings.value("Password");
 QVariant variantRole = settings.value("Password");
 QVariantMap mapPassword = variantPassword.value<QVariantMap>();
 QVariantMap mapRole = variantRole.value<QVariantMap>();
 QMapIterator<QString, QVariant> iteratorPassword(mapPassword);
 QMapIterator<QString, QVariant>iteratorRole(mapRole);
  while (iteratorPassword.hasNext()) 
  {
      iteratorPassword.next();
      QString user = iteratorPassword.key();
      QString pass = iteratorPassword.value().toString();
      iteratorRole.next();
      QString role = iteratorRole.value().toString();   
   }

第一次正确写入值。但是,如果我再次运行该程序,则该值会覆盖旧值。有人可以在这里建议我一个解决方案吗? 谢谢你

【问题讨论】:

  • 你读过这些值吗,我只看到你设置了它们
  • 真,缺少 QSettings::value();呼吁阅读它们
  • 我已经添加了读取值的代码。我在不同的插槽中读取值。当某个用户尝试登录时使用它。

标签: qt ini


【解决方案1】:

每次单击“分配”按钮时,您都会创建新的映射,将用户、密码和角色存储在其中,并将该列表保存到配置文件中。

缺少的是您在修改现有映射之前阅读它们。 而不是

QVariantMap userPasswordMapping;
QVariantMap userRoleMapping;

做:

QVariantMap userPasswordMapping = settings.value("Password").value<QVariantMap>();
QVariantMap userRoleMapping = settings.value("Role").value<QVariantMap>();

关于您发布的关于读取值的代码的附加提示:

QVariant variantRole = settings.value("Password");

这应该是

.value("Role");

【讨论】:

    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2018-11-10
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多