Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: asvil от Май 09, 2010, 22:21



Название: Хитрость использования QSettings в Qt Script
Отправлено: 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");