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