перебирать словарь настроек с помощью Qsettings с логическими значениями

Хм, я думал, что был умным, чтобы управлять настройками PyQt с помощью (Python) словаря. Таким образом, я подумал, что смогу перебрать настройки хотя бы для сохранения и сравнения.

Но у меня возникли проблемы при использовании логических значений.

у меня есть метод

def changed(self):
    s = QSettings()
    for key in self._options:
        #print key, self._options[key], s.value(key)
        if self._options[key] != s.value(key):
            return True
    return False

Это работает до тех пор, пока в s нет логических значений.
Если в словаре есть логическое значение, функция всегда возвращает True.

Раскомментирование строки print показывает проблему и приводит к

hasDefault True true

Итак, вопрос: что это за нижний регистр true, который возвращает QSettings, и как я могу заставить Python правильно сравнить его с логическим значением?

Я читал, что вы должны использовать toBool(), чтобы компенсировать разные представления на разных платформах. Но я не вижу, как я могу сделать это в таком цикле (т.е. не зная заранее, какой тип сравнивать).

Любая подсказка или решение приветствуется!


person uli_1973    schedule 18.06.2013    source источник


Ответы (1)


Возможно, пост был преждевременным, но он был полезен для прояснения ситуации.

Дальнейшие исследования показали, что это проблема не последних версий Qt, но теперь QSettings.value() предлагает необязательный аргумент type для указания типа возвращаемого значения.

С

for key in self._options:
        if self._options[key] != s.value(key, type=type(self._options[key])):
            return True
    return False

Мне удалось установить тип возврата s.value()s на тип фактического значения в словаре.

Пусть это поможет кому-то еще...

person uli_1973    schedule 18.06.2013