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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Хитрость использования QSettings в Qt Script  (Прочитано 4818 раз)
asvil
Гость
« : Май 09, 2010, 22:21 »

При использовании объекта типа QSettings в среде Qt Script существует одна проблема. Когда Вы устанавливаете какое-либо значение для какого-либо ключа, в объекте оно сохраняется в QVariant. После сохранения ключей и значений в файл или другое место они конвертируются/кодируются в значения типа QString. После загрузки значений из файла в объект, в объекте они хранятся в виде QString. А во время получения данных значений используя функцию QSettings::value они преобразовываются с помощью конвертирующих функций определенных в QVariant.
Говоря проще, при второй загрузке приложения, все ранее сохраненные настройки имеют тип QString.
Ну так вот сама проблема:
QVariant ковертирует строку "false" в bool false.
В среде Qt Script QSettings::value возвращает строку и данная строка если она не пустая конвертируется в true. Это значит, что в Qt Script данный код будет работать корректно только при первом запуске приложения:

var settings = new QSettings(this);
if (!settings.contains("key"))
  settings.setValue("key", false);
if (!settings.value("key"))
  print("key is false");

При последующих запусках приложения settings.value("key") будет возвращать строку "false" и Qt Script будет ее успешно конвертировать в Boolean(true).

Выход из создавшегося положения:

var key;
key = typeof(settings.value("key")) == "string" ? settings.value("key") == "true" : settings.value("key");
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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