强制QItemDelegate重绘

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了强制QItemDelegate重绘相关的知识,希望对你有一定的参考价值。

我目前正在尝试通过外部按钮获取自定义委托以更改正在绘制的颜色。我目前让它工作在按钮的意义上将改变委托绘制的颜色,但代表不会在按下按钮时更新,而是在我将鼠标移动到关联的查看器时更新。

我为了颜色目的制作了一个自定义按钮(非常简单)

class ColorButton(QPushButton):
    def __init__(self,parent=None,color=None):
        super(ColorButton,self).__init__(parent)
        self.color=color

    def paintEvent(self,e):
        painter=QPainter()
        painter.begin(self)
        painter.fillRect(self.rect(),self.color)
        painter.end()

    def getColor(self):
        return self.color

然后我将颜色按钮的pressed()信号连接到我的代理人的updateBG功能。

button1=ColorButton(color=QColor(0,0,0))
button1.pressed.connect(delegate.updateBG)

委托的updateBG()函数只是更新自身内的颜色变量。

def updateBG(self):
    color=self.sender().getColor()
    self.bgBrush=QBrush(color)

我有paint()函数在绘制矩形时只使用这种颜色。

def paint(self,painter,option,index):
    painter.save()
    painter.setBrush(self.bgBrush)
    painter.drawRect(self.rect())
    painter.restore()

有没有办法强制代表重新粉刷? update()和repaint()函数都不适用于委托本身。我是否必须在我的查看器(即QListView)上调用repaint()?如果这是唯一的方法,有没有办法从代表中获取查看器?或者我应该在委托类之外移动此updateBG()函数?

我通过QT.py使用QT5(实际上是pyside2或PyQt5)。

答案

发现我可以通过将pressed()信号连接到我的查看器的重置功能来强制更新。

button1.pressed.connect(viewer.reset)

不确定这是否是最好的方法,但似乎有效。

以上是关于强制QItemDelegate重绘的主要内容,如果未能解决你的问题,请参考以下文章

如何强制重绘列表视图?

Android强制Fragment重建View

Swing JLabel:强制重绘()

如何在 NSScrollView 中强制重绘内容

如何强制 jQuery UI 对话框再次重绘或触发某些东西来强制调整大小

QPlainTextEdit 强制重绘