我有一组自定义的类,它们是从QStyledItemDelegate,QAbstractModel和QTableView派生的。
在TableView的每一行中,我都有两个ComboBoxes,第一行包含一个类别,第二行用于显示子类别,因此,每当第一行中的索引更改时,我都必须在第二行中调用clear + addItems。>
如果在第二个ComboBox上的Delegate.createEditor期间,我有办法访问第一个,则可以像建议的here一样进行连接。
我能想到的就是创建一个字典来存储对ComboBox的引用,以便在创建第二个ComboBox时可以检索到它。在删除方面,委托人一无所知,但模型却不知道,所以我有完整的实施策略。
我的问题:还有更好的方法吗?
我的实施策略:
class Delegate(QtWidgets.QStyledItemDelegate):
def __init__(self):
super().__init__()
self.widget_table = {}
def get_widget(self, row, col):
if (row, col) in self.widget_table:
return self.widget_table[(row, col)]
return None
def add_widget(self, row, col, widget):
self.widget_table[(row, column)] = widget
def createEditor(self, parent, option, index):
value = self.model.data(index)
#Imagine that MAKE_WIDGET knows what widget type to create depending on the column.
widget = MAKE_WIDGET(index.column(), parent)
if index.column() == 3: # e.g. combo boxes are at col 2 and 3
cb1 = self.get_widget(index.row(), 2)
cb1.currentIndexChanged[str].connect(widget.MY_CALLBACK)
self.add_widget(index.row(), index.column, widget)
return widget