我有一组自定义的类,这些类派生自QStyledItemDelegate、QAbstractModel和QTableView
在TableView的每一行中,我有两个组合框,第一个包含一个类别,第二个用于显示子类别,因此每当第一个组合框中的索引发生更改时,我必须在第二个组合框中调用clear+addItems
如果在第二个组合框上的Delegate.createEditor期间,我有办法访问第一个组合框,那么我可以类似地连接到建议的here
我所能想到的就是创建一个字典来存储对组合框的引用,这样我就可以在创建第二个组合框时检索第一个组合框。删除方面,代理什么都不知道,但是模型知道,所以我有一个完整的实现策略
我的问题:有更好的方法吗
我的执行战略:
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
目前没有回答
相关问题 更多 >
编程相关推荐