【发布时间】:2013-12-04 05:36:36
【问题描述】:
我正在使用 StyledItemDelegate 在我的 QTableView 的一个单元格中呈现图标。 选择一行后,我希望代表的背景绘制为默认项目的背景,但不知道如何解决它。 我猜答案介于 initStyleOption() 方法和委托的“选项”之间,但我找不到关于这些选项的全面文档来自己弄清楚。
我们将不胜感激!
下面是一些示例代码,展示了自定义委托如何绘制一个圆圈,然后忽略行选择及其背景颜色并保持白色:
import sys
from PySide.QtGui import *
from PySide.QtCore import *
class MyItemDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
super(MyItemDelegate, self).__init__(parent)
def paint(self, painter, option, index):
if index.column() == 0:
rect = option.rect
rect.setWidth(rect.height())
painter.drawEllipse(rect)
else:
QStyledItemDelegate.paint(self, painter, option, index)
class MyModel (QStandardItemModel):
def __init__( self, parent=None ):
super( MyModel, self).__init__( parent )
self.setHorizontalHeaderLabels(['a', 'b', 'c'])
self.init_data()
def init_data(self):
for row in range(0, 5):
for col in range(0, 3):
col_item = QStandardItem( '%s' % (row * col) )
self.setItem(row, col, col_item)
class MyTableView(QTableView):
def __init__( self, parent=None ):
super( MyTableView, self).__init__( parent )
model = MyModel()
self.setModel(model)
self.setItemDelegate(MyItemDelegate())
self.setSelectionBehavior(QAbstractItemView.SelectRows)
if __name__ == '__main__':
app = QApplication( sys.argv )
model = MyModel()
view = MyTableView()
view.show()
sys.exit( app.exec_() )
【问题讨论】: