Russian Qt Forum
Сентябрь 22, 2024, 02:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT + .INI (РЕШЕНО)  (Прочитано 11183 раз)
MAGrikh
Гость
« : Июнь 12, 2009, 11:10 »

Подскажите как считать / записать с помощью QT такой .INI файлик

Код
INI
[SET_1]
ID=User2
Name=name1
 
[SET_2]
ID=User2
Name=name2
 
...
 
[SET_N]
ID=UserN
Name=nameN
 
Вопрос в основном заключается в том - как работать с группировками [....]
« Последнее редактирование: Июнь 18, 2009, 15:47 от MAGrikh » Записан
spirit
Гость
« Ответ #1 : Июнь 12, 2009, 11:17 »

Код
C++ (Qt)
QSettings settings("mysettings.ini", QSettings::IniFormat);
const QString id1 = settings.value("SET_1/ID").toString();
const QString name1 = settings.value("SET_1/Name").toString();
...
 
так же смотри QSettings::beginGroup/endGroup
Записан
MAGrikh
Гость
« Ответ #2 : Июнь 12, 2009, 11:29 »

Про QSettings::beginGroup/endGroup нашел :

Код
C++ (Qt)
settings.beginGroup("SET_1");
settings.setValue("ID", User1);
settings.setValue("Name", name1);
settings.endGroup();
 
....
 
settings.beginGroup("SET_N");
settings.setValue("ID", UserN);
settings.setValue("Name", nameN);
settings.endGroup();
 

А если я делаю INI файл для того чтобы пользователь сам в нем менял настройки, а соответственно не могу предугадать каким реально будет [SET_1] ... [SET_N] - как их перебирать?

Или лучше вне этих групп создать что-то вроде:
Код
INI
SETS=SET_1;SET_2; ... ;SET_N
 
считать значение SETS,  разобрать его на составляющие, и по группам ходить уже устроив перебор всех значений в SETS
« Последнее редактирование: Июнь 12, 2009, 11:33 от MAGrikh » Записан
spirit
Гость
« Ответ #3 : Июнь 12, 2009, 11:37 »

см. QSettings::allKeys ().
Записан
MAGrikh
Гость
« Ответ #4 : Июнь 12, 2009, 11:59 »

Спасибо!
Вроде разобрался
Записан
White Owl
Гость
« Ответ #5 : Июнь 12, 2009, 17:12 »

А если я делаю INI файл для того чтобы пользователь сам в нем менял настройки, а соответственно не могу предугадать каким реально будет [SET_1] ... [SET_N] - как их перебирать?
QStringList QSettings::childGroups () const
Записан
MAGrikh
Гость
« Ответ #6 : Июнь 18, 2009, 14:42 »

С чтением файла вроде все понятно, хотя группу [General] при вызове QStringList groups = settings.childGroups(); он не показывает (остальные показывает)

В данный момент я хочу чтобы программа проверяла существует ли нужный мне файл и если его нет создавала новый и писала туда настройки, если же он есть - то считывала то что есть

мой код правильно показывает что файла нету (если его нет) и правильно все считывает (если файл существует)

ВОПРОС: как изменить код, чтобы  в случае когда файл не существует создавался файл "config.ini" такого вида
 
Код
INI
[ae]
CountryName=United Arab Emirates
Region=Middle East
 
[ar]
CountryName=Argentina
Region=America
 

а вот код моей программы:

Код
C++ (Qt)
   QString fileName = "config.ini";
 
   if (!QFile::exists(fileName))
   qDebug() << "FILE" << fileName <<" DON'T EXIST" << endl;
 
   QSettings settings(fileName, QSettings::IniFormat);
 
   QStringList groups = settings.childGroups();
 
   for (int i = 0; i < groups.size(); ++i) {
   qDebug()  << groups.at(i) << endl;
 
   settings.beginGroup(groups.at(i));
 
   qDebug() << "CountryName:"  << settings.value("CountryName").toString()     << endl;
   qDebug() << "Region:"       << settings.value("Region").toString()          << endl;
 
   settings.endGroup();
   }
 
Записан
spirit
Гость
« Ответ #7 : Июнь 18, 2009, 14:47 »

вопрос с подвохом?
Код
C++ (Qt)
QString fileName = "config.ini";
 
if (!QFile::exists(fileName)) {
  qDebug() << "FILE" << fileName <<" DON'T EXIST" << endl;
  //создаем тут
} else {
  QSettings settings(fileName, QSettings::IniFormat);        
 
  QStringList groups = settings.childGroups();
 
  for (int i = 0; i < groups.size(); ++i) {
     qDebug()  << groups.at(i) << endl;
 
     settings.beginGroup(groups.at(i));
 
     qDebug() << "CountryName:"  << settings.value("CountryName").toString()     << endl;
     qDebug() << "Region:"       << settings.value("Region").toString()          << endl;
 
     settings.endGroup();
  }
}
 
Записан
MAGrikh
Гость
« Ответ #8 : Июнь 18, 2009, 15:06 »

Нееет, вопрос бед подвоха...
он заключается в том, ЧТО НАПИСАТЬ ВМЕСТО "//создаем тут"

как создать и записать этот файл?!
не могу найти нормального примера чтобы понять...
Записан
spirit
Гость
« Ответ #9 : Июнь 18, 2009, 15:11 »

ааа, ну все просто
Код
C++ (Qt)
QString fileName = "config.ini";
 
if (!QFile::exists(fileName)) {
  qDebug() << "FILE" << fileName <<" DON'T EXIST" << endl;
  QSettings settings(fileName, QSettings::IniFormat);
  //вариант 1
  settings.setValue("ae/CountryName", "United Arab Emirates");
  settings.setValue("ae/Region", "Middle East");
  //вариант 2
  settings.beginGroup("ar");
  settings.setValue("CountryName", "Argentina");
  settings.setValue("Region", "America");
  settings.endGroup();
} else {
  QSettings settings(fileName, QSettings::IniFormat);        
 
  QStringList groups = settings.childGroups();
 
  for (int i = 0; i < groups.size(); ++i) {
     qDebug()  << groups.at(i) << endl;
 
     settings.beginGroup(groups.at(i));
 
     qDebug() << "CountryName:"  << settings.value("CountryName").toString()     << endl;
     qDebug() << "Region:"       << settings.value("Region").toString()          << endl;
 
     settings.endGroup();
  }
}
 
Записан
MAGrikh
Гость
« Ответ #10 : Июнь 18, 2009, 15:34 »

ОГРОМНОЕ СПАСИБО
Все заработало!!!

Только Надо в начало перенести эту строку

QSettings settings(fileName, QSettings::IniFormat);

Записан
spirit
Гость
« Ответ #11 : Июнь 18, 2009, 15:36 »

ну уже сам оптимизируй как тебе удобно.  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.374 секунд. Запросов: 21.