使用带有布尔值的Qsettings迭代设置字典

时间:2013-06-18 14:52:20

标签: pyqt4 case-sensitive qsettings

嗯,我以为我很聪明地用(Python)词典管理我的PyQt设置。这样我认为我可以迭代设置,至少是为了保存和比较。

但是在使用布尔值时遇到了问题。

我有一个方法

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

所以问题是:QSettings返回的这个小写true是什么,我怎样才能让Python正确地将它与布尔值进行比较?

我读过你应该使用toBool()来弥补不同平台上的不同表现形式。但我不知道如何在这样的循环中做到这一点(即事先不知道要比较什么类型)。

赞赏任何提示或解决方案!

1 个答案:

答案 0 :(得分: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的类型设置为字典中实际值的类型。

可以帮助别人......