问题是值被转换为保存的类型,在您的情况下,它是一个整数,接受以下值
Qt::Checked
,
Qt::PartiallyChecked
和
Qt::已检查
,解决方法是将它们与这些值进行比较。
def setData(self, index, value, role=QtCore.Qt.DisplayRole):
row = index.row()
if index.column() == self.column and role == QtCore.Qt.CheckStateRole:
if value == QtCore.Qt.Checked:
self.checkboxes[row] = True
else:
self.checkboxes[row] = False
self.dataChanged.emit(index, index, [QtCore.Qt.CheckStateRole])
return True
else:
return False
要选择或取消选择,我们使用以下方法
self.table_model3.dataChanged.connect(self.on_data_changed)
def on_data_changed(self, topleft, bottomRight, roles):
if QtCore.Qt.CheckStateRole in roles:
row = topleft.row()
isChecked = topleft.data(QtCore.Qt.CheckStateRole) == QtCore.Qt.Checked
flag = QtCore.QItemSelectionModel.Select if isChecked else QtCore.QItemSelectionModel.Deselect
for col in range(self.table_model3.columnCount()):
ix = self.table_model3.index(row, col)
self.tableView3.selectionModel().select(ix, flag)