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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: запись QSettings в INI создает 2 ключа, так и должно быть?  (Прочитано 11548 раз)
SimpleSunny
Гость
« Ответ #15 : Июнь 29, 2010, 20:46 »

Можно глянуть тут.
http://www.prog.org.ru/topic_12074_0.html
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #16 : Июнь 29, 2010, 21:21 »

не нравится... это должно было быть нативно
Записан

2^7-1 == 127, задумайтесь...
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #17 : Июнь 29, 2010, 21:34 »

куитивно
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #18 : Июнь 30, 2010, 08:23 »

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

ИМХО еще раз - механизм QSettings реализован угребищный, можно было бы сделать гораздо удобнее и надежнее в использовании.

а чтобы не было больше такой ситуации, переделал класс Settings "не по Шлее", сделал 1 метод записи-чтения настроек, чтобы структура задавалась 1 раз

Код:
void Settings::settingsSaveRestore( bool save )
{
if( save )
setValue("SettingsDefined", true );
beginGroup( "ViewSettings" );
{
beginGroup( "MainText" );
{
beginGroup( "FontsAndColors" );
{
if( save )
{
setValue(....);
......
}
else
{
var = value(....).value<QColor>();
....
}
}
endGroup(); // FontsAndColors

//beginGroup( "DistanciesAndSizes" );
//endGroup(); // DistanciesAndSizes

beginGroup( "OtherSettings" );
{
if( save )
{
setValue(....);
....
}
else
{
value = value(....).toInt();
....
}
}
endGroup(); // OtherSettings
}
endGroup(); // MainText

//beginGroup( "ConsoleText" );
{
//beginGroup( "FontsAndColors" );
//endGroup(); // FontsAndColors

//beginGroup( "OtherSettings" );
//endGroup(); //OtherSettings
}
//endGroup(); // ConsoleText

//beginGroup( "SelectAndViewWins" );
//endGroup(); // SelectAndViewWins
}
endGroup(); // ViewSettings

beginGroup( "ShellSettings" );
{
if( save )
{
setValue("MRUlist", MRUlist );
}
else
{
MRUlist = value("MRUlist").toStringList();
}
}
endGroup(); //ShellSettings
if( save )
sync();
}

соответственно, конструктор этого класса

Код:
Settings::Settings()
: QSettings( "settings.ini", QSettings::IniFormat )
{
if( !value( "SettingsDefined" ).toBool() )
{ // файл только что создан, установки не определены, заполняются умолчательными значениями
resetDefaultSettings();
settingsSaveRestore( true );
}
else // установки загружены из файла
settingsSaveRestore( false );
}


рекомендация в Шлее наихудшая
« Последнее редактирование: Июнь 30, 2010, 09:05 от Гурман » Записан

2^7-1 == 127, задумайтесь...
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #19 : Июнь 30, 2010, 09:28 »

rtfm QSettings::registerFormat, можешь сделать себе в формате XML
Записан

Гугль в помощь
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #20 : Июнь 30, 2010, 10:08 »

некогда мне еще потрохами XML заниматься... тем более, что в INI пока все работает, что нужно

где-нибудь можно написать или подписать имеющийся feature request чтобы QSettings::XmlFormat и соответствующая поддержка появились?
Записан

2^7-1 == 127, задумайтесь...
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #21 : Июнь 30, 2010, 13:27 »

Цитировать
где-нибудь можно написать или подписать имеющийся feature request чтобы QSettings::XmlFormat и соответствующая поддержка появились?

конечно можно - в баг репорте троллей, а на следующий день когда закроют - к себе в список дел, сделаешь все то же что уже делал я и поймешь что это не удобно - проще простенькую обвязку вокруг QDOMElement использовать. Да можно и просто QDOMElement - никаких глубоких проблем нет - переносимость, возможность правки пользователем, удобство при написании загрузки / сохранения, XML одинаковый на всех системах а не этот неичтаемый INI.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #22 : Июнь 30, 2010, 13:48 »

Цитировать
сделаешь все то же что уже делал я и поймешь что это не удобно

почему это? я в таком случае просто заменю Settings::Settings() : QSettings( "settings.ini", QSettings::IniFormat ) на Settings::Settings() : QSettings( "settings.xml", QSettings::XmlFormat ) и меня это устроит
Записан

2^7-1 == 127, задумайтесь...
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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