Ниже я нашел несколько ответов на мой вопрос, но я не могу понять, как реализовать их в моем случае.
Я пытаюсь подключить ComboBox к QTableView. где int id из выбранной строки ComboBox будет использоваться для фильтрации внешнего ключа модели, присоединенной к QTableView.
Допустим, у нас есть таблица personnel
с внешним ключом person_company_fk
колонка. Эта таблица отображается в QTableView через модель. Модель анализируется через фильтр с подклассами из QSortFilterProxyModel.
Я подключился
self.currentIndexChanged.connect(self.personnelFilteredModel.FilterData(company_id))
, так что любое изменение в выборе в ComboBox отправляет идентификатор отфильтрованной модели.
Моя проблема в том, что модель не обновляет sh, и, хотя все подключено, 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