作者:1031372720_eba8d5 | 来源:互联网 | 2023-08-15 19:23
我正在使用QStackedWidget,在屏幕1上,我有一个带有项目列表的QTreeWidget,屏幕2有一些组合框和复选框.双击树窗口小部件中的项目将我带到屏幕2.我想要做的是开发一种记住所选
我正在使用QStackedWidget,在屏幕1上,我有一个带有项目列表的QTreeWidget,屏幕2有一些组合框和复选框.双击树窗口小部件中的项目将我带到屏幕2.我想要做的是开发一种记住所选设置的方法.
所以对于例如.如果我在treewidget中双击’Item1′,在屏幕2的check和组合框中选择一些选项并返回到屏幕1并选择’Item2′,这次我选择一组不同的组合项目等.返回再次到第一个屏幕并双击’Item1′,我应该恢复之前与之关联的选项.
希望这是有道理的.我需要最好的方法帮助,一些代码示例会很棒.
真的很感激任何帮助.
解决方法:
所有树窗口小部件项都有一个setData方法,可用于存储关联值,在这种情况下,它只是一个包含设置的字典.
为了使保存和恢复设置更容易,建议确保所有复选框,组合框等都有一个共同的父级,并且它们都被赋予了唯一的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,则可能需要额外执行一步,因为数据将返回QVariant,而不是dict.如果是这种情况,要获得dict,你需要这样做:
settings = item.data(0, Qt.QtCore.Qt.UserRole).toPyObject()
或者,您可以在任何地方摆脱QVariant,但将其放在程序的开头:
import sip
sip.setapi('QVariant', 2)
from PyQt4 import ... etc