1. 程式人生 > >QT之INI檔案和登錄檔操作方法學習筆記

QT之INI檔案和登錄檔操作方法學習筆記

INI檔案格式

節[section]

引數(KEY/VALUE)   name=value

註釋 註釋使用分號表示(;)。在分號後面的文字,直到該行結尾都全部為註釋

QCoreApplication::applicationDirPath()為應用程式當前的絕對路徑

QSettings(const QString &fileName, QSettings::Format format, QObject *parent = nullptr)

 

void QSettings::beginGroup(const QString &prefix)

void QSettings::endGroup()

讀取節點下對應key的值:

QVariant QSettings::value(const QString &key, const QVariant &defaultValue = QVariant()) const

設定節點下對應key的值,如果節點下不存在對應的key,則會在該節點下建立一個新的key:

void QSettings::setValue(const QString &key, const QVariant &value)

 

void QSettings::beginWriteArray(const QString

&prefix, int size = -1)

int QSettings::beginReadArray(const QString &prefix)

void QSettings::endArray()

  struct Login {
      QString userName;
      QString password;
  };
  QList<Login> logins;
  ...

  QSettings settings;
  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();
      logins.append(login);
  }
  settings.endArray();
  struct Login {
      QString userName;
      QString password;
  };
  QList<Login> logins;
  ...

  QSettings settings;
  settings.beginWriteArray("logins");
  for (int i = 0; i < logins.size(); ++i) {
      settings.setArrayIndex(i);
      settings.setValue("userName", list.at(i).userName);
      settings.setValue("password", list.at(i).password);
  }
  settings.endArray();

 

中文時需要設定ini檔案的編碼方式,否則會出現亂碼

void QSettings::setIniCodec(const char *codecName)

 

登錄檔

登錄檔(Registry)是Microsoft Windows中的一個重要的資料庫,用於儲存系統和應用程式的設定資訊。

登錄檔編輯器:%systemroot%/regedit.exe

QSettings::QSettings(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = nullptr)