2

我是 python 的新手,主要是 pyqt。问题很简单:我有一个QTableView并且我想“简单地”改变一些行的颜色。环顾四周,我发现最简单的解决方案应该是以这样的方式覆盖模型中的数据方法:

class MyModel(QtSql.QSqlTableModel):

    def data(self,idx,role):
        testindex=self.index(idx.row(),idx.column(),idx.parent())
        if(role==QtCore.Qt.BackgroundRole):
            return QtGui.QColor(255,0,0)
        elif role == QtCore.Qt.DisplayRole:
            return QtSql.QSqlTableModel().data(testindex)

当我使用此模型重新实现时,行正在更改颜色,但单元格值消失并且返回语句QtSql.QSqlTableModel().data(testindex)始终为None. 我要疯了才能找到解决方案。你可以帮帮我吗?

4

1 回答 1

2

您的实现在几个方面被破坏:(1)它总是为任何未指定的角色返回,(2)它在每次请求显示角色时None创建一个新实例,而不是调用基类方法。QSqlTableModel

实现可能应该是这样的:

class MyModel(QtSql.QSqlTableModel):

    def data(self, index, role):
        if role == QtCore.Qt.BackgroundRole:
            return QtGui.QColor(255, 0, 0)
        return super(MyModel, self).data(index, role)
于 2016-09-13T19:20:29.603 回答