Часто приходится иметь дело с ini
файлами. Так вот, Qt
предоставляет класс для работы с этим форматом файлов. На первый взгляд кажется удобным, но посмотрим. В данной статье описано как работать с ini
файлами.
1. Чтение данных из ini файла
... #include <QSettings> #include <QVariant> ... QSettings sett("path/to/ini/file", QSettings::IniFormat); this->ftpHost = sett.value("CONNECT/HOST", "").toString(); this->ftpPort = sett.value("CONNECT/PORT", 21).toInt(); this->ftpUser = sett.value("CONNECT/USER", "anonymous").toString(); this->ftpPass = sett.value("CONNECT/PASS", "").toString(); this->ftpPassive = sett.value("CONNECT/PASSIVE", "true").toBool();
Для удобства можно воспользоватся методами beginGroup() и endGroup():
sett.beginGroup("CONNECT"); this->ftpHost = sett.value("HOST", "").toString(); this->ftpPort = sett.value("PORT", 21).toInt(); this->ftpUser = sett.value("USER", "anonymous").toString(); this->ftpPass = sett.value("PASS", "").toString(); this->ftpPassive = sett.value("PASSIVE", "true").toBool(); sett.endGroup();
Метод value()
принимает два параметра. Первый параметр, типа QString
, это путь к ключу, который включает в себя секцию и ключ разделенные слэшем. Второй параметр, типа QVariant
- значение по умолчанию, которое используется в том случае, если ключа в указанной секции не существует. Возвращает метод значение типа QVariant
.
2. Добавление и изменение данных в ini файле
QSettings sett("path/to/ini/file", QSettings::IniFormat); sett.setValue("SECTION/KEY", "Some value");
или так:
QSettings sett("path/to/ini/file", QSettings::IniFormat); beginGroup("SECTION"); sett.setValue("KEY", "Some value"); endGroup("SECTION");
Метод setValue()
принимает два параметра. Первый параметр, типа QString
, указывает путь к создаваемому, или изменяемому ключу. Если ключа не существует, то он будет создан. Второй параметр, типа QVariant
- задает значение записываемого ключа.
3. Проверка существования ключа
if ( sett.contains("SECTION/KEY") ){ ... }
Метод contains()
проверяет ключ на наличие его в ini
файле. Принимает один параметр типа QString
и возвращает булево значение.
4. Проверка существования секции
Проверить существует ли секция в ini
файле можно таким способом:
QStringList sections = sett.childGroups(); if ( sections.contains("SECTION_6", Qt::CaseInsensitive) ){ QMessageBox::information(this, "Information", "Success"); } else{ QMessageBox::information(this, "Information", "Fail"); }
5. Удаление ключа, или секции
-
Удаление ключа:
sett.remove("SECTION/KEY");
-
Удаление секции:
sett.remove("SECTION");
-
Очистка всего
ini
файла:
sett.remove("");
Удачи!
здравствуйте, подскажите пожалуйста - можно ли в
ОтветитьУдалитьthis->ftpHost = sett.value("CONNECT/HOST").toString();
вместо "CONNECT/HOST" в роли ключа передать переменную?
и если то можно то как?
QString key = "CONNECT/HOST";
ОтветитьУдалитьthis->ftpHost = sett.value(key).toString();