我目前正在尝试让自定义委托通过外部按钮更改它正在绘制的颜色。我目前让它在按钮的意义上工作会改变代表绘制的颜色,但代表不会在按下按钮时更新,而是在我将鼠标移到关联的查看器上时更新。
我为颜色目的制作了一个自定义按钮(非常简单)
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)。