1

我正在努力让看似简单的代表工作。

我想要的是更改表格视图单元格的背景。据我了解,我应该看看 Qt.BackgroundRole。到目前为止,我还不能让它工作,或者找到一个相关的例子。

到目前为止,我所拥有的是一个用颜色填充单元格的代表,但它似乎在文本之上。我想要的是保留文本,并且只更改单元格的背景。

class CellBackgroundColor(QtGui.QStyledItemDelegate):

    def __init__(self, parent = None):
        QtGui.QStyledItemDelegate.__init__(self, parent)

    def paint(self, painter, option, index):       

        path = index.model().data(index,  QtCore.Qt.DisplayRole).toString()
        painter.fillRect(option.rect, QtGui.QColor(path))

关于如何在 tableview 委托中实现这个 Qt.BackgroundRole 的任何想法?

在此先感谢,克里斯

4

1 回答 1

2

您不需要使用委托来绘制单元格背景;默认委托通过以下方式支持背景绘画Qt.BackgroundRole

class MyTableModel(QtCore.QAbstractTableModel):
    ...
    def data(self, index, role=QtCore.Qt.DisplayRole):
        if role == QtCore.Qt.BackgroundRole:
            return QtGui.QColor(...)

否则,使用任何适当的覆盖initStyleOption来初始化 和绘制它是一个好主意:QStyleOptionViewItem

class CellBackgroundColor(QtGui.QStyledItemDelegate):
    ...
    def paint(self, painter, option, index):
        self.initStyleOption(option, index)
        # override background
        option.backgroundBrush = QtGui.QColor(...)
        widget = option.widget
        style = widget.style()
        style.drawControl(QtGui.QStyle.CE_ItemViewItem, option, painter, widget)
于 2012-10-29T11:54:07.853 回答