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))

この 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 に答える