如何在PyQt中的QTableView中的DisplayRole和EditRole上添加验证器?

时间:2015-09-12 14:02:26

标签: python model-view-controller pyqt qtableview qabstracttablemodel

我有一个QTableView使用QAbstractTableModel将文件和文件夹填充为项目,我没有使用QFileSystemModel,因为表格视图不单独显示文件夹名称,它还显示文件的属性文件夹。

所以我的问题是如何在DisplayRole上添加验证器,或者如果有人试图在EditRole中编辑文件夹名称,那么如果模型加载数据并显示它应该标记文件夹具有特殊字符的名称或具有超过预期字符的文件夹名称包含文件夹名称的单元格应为红色背景,

我尝试过添加一个引发异常的验证器,所以如果它很好BackgroundColorRole返回QVariant,如果异常则返回QtCore.Qt.red

1 个答案:

答案 0 :(得分:0)

也许这会有所帮助:

class YourModel(QtCore.QAbstractTableModel):
    def setData(self, index, value, role):
        # VALIDATE HERE
        if index.column() == 0:
            return False
        if value == 'Some word' or value == '':
            return False
        # END VALIDATE HERE
        if index.isValid() and role == QtCore.Qt.EditRole:
            self.cached[index.row()][index.column()] = QtCore.QVariant(value)
            self.emit(QtCore.SIGNAL("dataChanged(QModelIndex, QModelIndex)"), index, index)
            return True
        else:
            return False