所有的樹控件項目有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
您可以發佈您的代碼以獲取建議 –
我的代碼太大而無法粘貼到此處,其中此查詢只是其中的一小部分。爲了展示這篇文章,我將不得不削減它。 ekhumoros回答下面的工作完美,雖然 – floyd1510