【问题标题】:how to make StyledItemDelegate draw with default selection style?如何使 QStyledItemDelegate 使用默认选择样式绘制?
【发布时间】: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_() )

【问题讨论】:

    标签: qt pyqt pyside


    【解决方案1】:

    您应该在进行自己的绘画之前调用基类的绘画方法,以保持默认行为:

        def paint(self, painter, option, index):
            QStyledItemDelegate.paint(self, painter, option, index)
            if index.column() == 0:
                rect = option.rect
                rect.setWidth(rect.height())
                painter.drawEllipse(rect)
    

    【讨论】:

    • 哈,我本可以发誓我在发帖之前尝试过。明显不是。谢谢!
    猜你喜欢
    • 2018-06-14
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多