I try to get all rows with checked ckeckboxes in a QTableView. I tried to do this with QSortFilterProxyModel, but I don't know how to accomplish. Searched a lot op SO, Google, Github, but not found what I need. Can someone please help me further?
This is my table
self.model = TableModel([headers, newRows])
self.proxy_model = QSortFilterProxyModel()
self.proxy_model.sort(0, Qt.SortOrder.AscendingOrder)
self.proxy_model.setDynamicSortFilter(True)
self.proxy_model.setFilterKeyColumn(-1) # Search all columns.
self.proxy_model.setSourceModel(self.model)
self.proxy_model.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
self.leSearch.returnPressed.connect(self.searchField)
self.tableView.setModel(self.proxy_model)
And this is my class
class TableModel(QAbstractTableModel):
def __init__(self, data = None):
super().__init__()
self.checks = {}
if data:
self.headers = data[0]
self.rows = data[1]
def data(self, index, role):
try:
if role == Qt.ItemDataRole.DisplayRole or role == Qt.ItemDataRole.EditRole:
return self.rows[index.row()][index.column()]
# elif role == Qt.ItemDataRole.CheckStateRole and (index.column() == 0 or index.column() == 6 or index.column() == 7):
elif role == Qt.ItemDataRole.CheckStateRole and (index.column() == 2 or index.column() == 3):
return self.checkState(QPersistentModelIndex(index))
return QVariant()
except Exception as e:
print(e)
def setData(self, index, value, role = Qt.ItemDataRole.EditRole):
if value is not None and role == Qt.ItemDataRole.EditRole:
self.rows[index.row()][index.column()] = value
return True
elif not index.isValid():
return False
elif role == 10 or role == Qt.ItemDataRole.CheckStateRole:
nextColumn = 3 if index.column() == 2 else 2
self.checks[QPersistentModelIndex(index)] = value
if value == 2 or Qt.CheckState.Checked: # Disable other checkbox
self.checks[QPersistentModelIndex(self.index(index.row(), nextColumn))] = 0
self.dataChanged.emit(index, self.index(index.row(),nextColumn), (role,))
# print(f'Checkbox\nRow:\t{index.row()}\nColumn:\t{index.column()}\nNext Column:\t{nextColumn}\nData:\t{index.data()}\n')
return True
# return False
return TableModel.setData(self, index, value, role)
def checkState(self, index):
if index in self.checks.keys():
return self.checks[index]
else:
return Qt.CheckState.Unchecked
Code for the slected checkboxes so far
def showSelected(self, state):
source_row = 1
source_parent = self.model.index(1, 5)
if state == True:
print('Checked')
else:
print('Unchecked')
self.proxy_model.filterAcceptsRow(source_row, source_parent)
return True