所有树小部件项都有一个setData 方法,您可以使用它来存储相关值,在这种情况下,它只是一个包含设置的dict。
为了使保存和恢复设置更容易,建议确保所有复选框、组合框等都有一个共同的父级,并且它们都被赋予一个唯一的objectName。这样,它就可以很容易地迭代它们:
def saveSettings(self):
settings = {}
for child in self.settingsParent.children():
name = child.objectName()
if not name:
continue
if isinstance(child, QtGui.QCheckBox):
settings[name] = child.isChecked()
elif isinstance(child, QtGui.QComboBox):
settings[name] = child.currentIndex()
...
return settings
def restoreSettings(self, settings):
for child in self.settingsParent.children():
name = child.objectName()
if name not in settings:
continue
if isinstance(child, QtGui.QCheckBox):
child.setChecked(settings[name])
elif isinstance(child, QtGui.QComboBox):
child.setCurrentIndex(settings[name])
...
要将设置添加到树小部件项目,您只需执行以下操作:
settings = self.saveSettings()
item.setData(0, QtCore.Qt.UserRole, settings)
要检索它们,请执行以下操作:
settings = item.data(0, QtCore.Qt.UserRole)
self.restoreSettings(settings)
但请注意,如果您使用的是 python2,则可能需要在此处采取额外的步骤,因为 data 将返回 QVariant,而不是 dict。如果是这种情况,要获得dict,您需要这样做:
settings = item.data(0, Qt.QtCore.Qt.UserRole).toPyObject()
或者,您可以在任何地方删除 QVariant,但将其放在程序的开头:
import sip
sip.setapi('QVariant', 2)
from PyQt4 import ... etc