Russian Qt Forum

Qt => Общие вопросы => Тема начата: Гурман от Июнь 29, 2010, 12:17



Название: можно ли записать QStringList в QSettings одним махом?
Отправлено: Гурман от Июнь 29, 2010, 12:17
у меня есть QStringList который может быть разного размера, надо записывать его в файл, создаваемый объектом класса ::QSettings

показалось, что это несложно сделать, есть даже такой метод QList<QVariant> QSettings::value(name).toList() который сразу возвращает список, его уже в QStringList элементарно

но как записывать целиком QList<QVariant> чтобы его можно было потом с помощью toList получить - не видно, если попытаться тупо написать QSettings::setValue("list", list ) то в файл записывается Invalid



Название: Re: можно ли записать QStringList в QSettings одним махом?
Отправлено: Makss от Июнь 29, 2010, 12:19
Код:
QSettings set;
QStringList lst;
lst << "1" << "2" << "3" << "4";
set.setValue("параметр", lst);

так)


Название: Re: можно ли записать QStringList в QSettings одним махом?
Отправлено: whirlwind от Июнь 29, 2010, 12:41
как вариант попробовать через QString

Код:
QSettings settings ;
QStringList sl ;
.....
settings.setValue( "some_string", sl.join(";") ) ;
.....
const QStringList sl2 = settings.getValue("some_string").toString().split(';') ;


Название: Re: можно ли записать QStringList в QSettings одним махом?
Отправлено: Гурман от Июнь 29, 2010, 12:55
Код:
QSettings set;
QStringList lst;
lst << "1" << "2" << "3" << "4";
set.setValue("параметр", lst);

так)

"так" тоже будет сообщение об ошибке в файле настроек

key\параметр=@Invalid()

при том, что лист точно правильно сформирован

как вариант попробовать через QString

Код:
QSettings settings ;
QStringList sl ;
.....
settings.setValue( "some_string", sl.join(";") ) ;
.....
const QStringList sl2 = settings.getValue("some_string").toString().split(';') ;

не нравится... должен быть более мягкий способ...


Название: Re: можно ли записать QStringList в QSettings одним махом?
Отправлено: crossly от Июнь 29, 2010, 13:01
QStringList пишется без всяких проблем с помощью setValue.....


Название: Re: можно ли записать QStringList в QSettings одним махом?
Отправлено: Гурман от Июнь 29, 2010, 13:09
в классе Settings::QSettings написано

Код:
	QStringList MRUlist;

в конструкторе Settings::Settings

Код:
					setValue("MRUlist", MRUlist );

MRUlist заполняется из менюшки, которая содержит предыдущие открытые файлы

Код:
	settings->MRUlist.clear();
foreach( QAction* action, MRUmenu->actions() )
settings->MRUlist << action->text();
settings->sync();

перед вызовом settings->sync(); точка останова, смотрю settings->MRUlist там все правильно, массив строк с именами предыдущих открытых файлов

но после синхронизации смотрю в файл настроек, там

Код:
MRUlist=@Invalid()

подумал, может быть нельзя пустой QStringList в начале передавать, написал ему MRUlist << "" в конструкторе

в результате в файл записалась одна пустая строка, которая там никак не изменяется, независимо от количества строк в settings->MRUlist перед вызовом sync(), ну и разумеется появляется пустой пункт в MRU при загрузке такого списка после старта приложения

при этом все остальные настройки, которые дискретно записываются (цвета, шрифты, разные параметры) - все давно нормально сохраняется

что не так с MRUlist, почему не записывается при выполнении sync()?


Название: Re: можно ли записать QStringList в QSettings одним махом?
Отправлено: mkv от Июнь 29, 2010, 13:23
даже если там MRUlist=@Invalid(), set.value("параметр").toStringList() должно вернуть пустой StringList...


Название: Re: можно ли записать QStringList в QSettings одним махом?
Отправлено: crossly от Июнь 29, 2010, 13:37
Код:
QSettings s("test.ini",QSettings::IniFormat);
    QStringList list;
    list<<"test"<<"sss"<<"1";
    s.setValue("list",list);
без всяких проблем записалось...

и вообще не понятна логика работы с QSettings ... в конструкторе вы записываете в настройки пустой список... потом где то его заполняете... а в каком месте вы заполненный список пишите... ?


Название: Re: можно ли записать QStringList в QSettings одним махом?
Отправлено: Гурман от Июнь 29, 2010, 14:08
а-ха... я не правильно понял логику работы QSettings... теперь все ясно