如何检查/取消选中QTableView并触发setData()

时间:2012-08-17 21:20:07

标签: python checkbox pyqt qtableview

我有一个自定义QTableModel我在PyQt中使用QTableView显示。我有一些字段设置为可检查,我想添加全部检查并检查无按钮。我觉得应该有一种方法可以导致从代码中调用setData(),以便检查状态将改变,以及我已经在setData()中编写的代码。实际上有办法做到这一点吗?

以下是我正在使用的setData:

if role == Qt.CheckStateRole:
        row = index.row()
        column = index.column()

        if row == 0 and column != 0:
            self._data.parsingConfiguration['columnEnabled'][column-1] = True if value == Qt.Checked else False
            self.dataChanged.emit(self.createIndex(1, column), self.createIndex(len(self._data.data),column))

            if column-1 == self._data.parsingConfiguration['groupNumberColumn']:
                self.setGroupNumber(self.getFirstEnabledMember())
            elif column-1 == self._data.parsingConfiguration['timeStepColumn']:
                self.setTimeStep(self.getFirstEnabledMember())
            self.emit(SIGNAL("layoutChanged()"))
            return True
        if column == 0 and row != 0:
            self._data.parsingConfiguration['rowEnabled'][row-1] = True if value == Qt.Checked else False
            self.dataChanged.emit(self.createIndex(row, 1), self.createIndex(row, self._data.numColumns+1))
            return True
        return False

1 个答案:

答案 0 :(得分:0)

经过多次尝试和错误后,我发现我可以更改数据,通知数据函数在QCheckState上返回,然后从模型中发出layoutChanged()信号。这仍然没有调用setData方法,并且确实需要编写单独的函数(因此没有完成我的初始目标),但它确实从用户的角度实现了所需的结果。