我在下面的问题中找到了几个答案,但我似乎不知道如何在我的案例中实现它们
我试图做的是将组合框连接到QTableView,其中组合框的选定行的int id将用于过滤附加到QTableView的模型的外键
假设我们有一个带有person_company_fk
外键列的personnel
表。此表通过模型显示在QTableView中。该模型通过一个过滤器进行解析,该过滤器从QSortFilterProxyModel子类化
我已经接通了
self.currentIndexChanged.connect(self.personnelFilteredModel.FilterData(company_id))
因此,组合框中选择的任何更改都会将ID发送到过滤后的模型
我的问题是模型不会刷新,即使所有内容都已连接,QTableView也不会更改(也没有错误)。我相信我的问题在于我如何给dataChanged.emit()
打电话。顺便说一下,如果我将self.fkFilter
设置为__init__
中的一个值,那么模型将显示过滤后的行
你能帮忙吗
class CustomFilterModel(QtCore.QSortFilterProxyModel):
def __init__(self):
super(CustomFilterModel,self).__init__()
self.fkColumnIndex=None
self.nameColumnIndex=None
self.fkFilter=None
self.setDynamicSortFilter(True)
def FilterData(self,fk):
self.fkFilter=fk
x=self.rowCount()
y=self.columnCount()
self.dataChanged.emit(self.index(0,0),self.index(x,y))
def filterAcceptsRow(self, source_row:int, source_parent:QtCore.QModelIndex) -> bool:
if (self.fkFilter !=None) and (self.fkColumnIndex !=None):
x=self.createIndex(source_row,self.fkColumnIndex)
j=int(self.sourceModel().data(x))
if j==self.fkFilter:
return True
else:
return False
else:
return True
必须调用^{} 方法才能应用筛选器
另一方面,可以改进filterAcceptsRow方法:
相关问题 更多 >
编程相关推荐