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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: можно ли записать QStringList в QSettings одним махом?  (Прочитано 10053 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« : Июнь 29, 2010, 12:17 »

у меня есть QStringList который может быть разного размера, надо записывать его в файл, создаваемый объектом класса ::QSettings

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

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

Записан

2^7-1 == 127, задумайтесь...
Makss
Гость
« Ответ #1 : Июнь 29, 2010, 12:19 »

Код:
QSettings set;
QStringList lst;
lst << "1" << "2" << "3" << "4";
set.setValue("параметр", lst);

так)
Записан
whirlwind
Гость
« Ответ #2 : Июнь 29, 2010, 12:41 »

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

Код:
QSettings settings ;
QStringList sl ;
.....
settings.setValue( "some_string", sl.join(";") ) ;
.....
const QStringList sl2 = settings.getValue("some_string").toString().split(';') ;
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #3 : Июнь 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(';') ;

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

2^7-1 == 127, задумайтесь...
crossly
Гость
« Ответ #4 : Июнь 29, 2010, 13:01 »

QStringList пишется без всяких проблем с помощью setValue.....
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #5 : Июнь 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()?
« Последнее редактирование: Июнь 29, 2010, 13:18 от Гурман » Записан

2^7-1 == 127, задумайтесь...
mkv
Гость
« Ответ #6 : Июнь 29, 2010, 13:23 »

даже если там MRUlist=@Invalid(), set.value("параметр").toStringList() должно вернуть пустой StringList...
Записан
crossly
Гость
« Ответ #7 : Июнь 29, 2010, 13:37 »

Код:
QSettings s("test.ini",QSettings::IniFormat);
    QStringList list;
    list<<"test"<<"sss"<<"1";
    s.setValue("list",list);
без всяких проблем записалось...

и вообще не понятна логика работы с QSettings ... в конструкторе вы записываете в настройки пустой список... потом где то его заполняете... а в каком месте вы заполненный список пишите... ?
« Последнее редактирование: Июнь 29, 2010, 13:56 от crossly » Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


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

а-ха... я не правильно понял логику работы QSettings... теперь все ясно
Записан

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


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