带有QBrush偏移问题的PySide QPainter.drawRect()

时间:2016-07-05 18:01:26

标签: python qt pyside

我正在尝试绘制尺寸为20x20像素的自定义按钮。我创建了一个继承QPushButton的类,我用下面的代码覆盖了paintEvent方法:

painter = QtGui.QPainter(self)

x = self.rect().x()
y = self.rect().y()

width = self.rect().width()
height = self.rect().height()

painter.setBrush(QBrush(QColor(170, 97, 112)))
painter.drawRect(x, y, width, height)

这就是我得到的(在Photoshop中编辑):

enter image description here

您可以清楚地看到左上角的x和y尺寸都有1个像素偏移。

我想知道为什么会这样。我可以通过从x中提取1个像素来解决这个问题,并且在宽度和高度上添加1个像素,因此它们的值将为:x = -1; y = -1; width = 21;身高= 21。

但这对我来说感觉很奇怪。我不知道这是Qt(或者只是PySide)的问题,或者我不明白。

1 个答案:

答案 0 :(得分:1)

我认为你对QPainter::drawRect实际做的事情感到困惑。来自QPainter documentation

  

使用当前的笔和画笔绘制当前矩形。

矩形用当前画笔填充,并用当前笔勾画。考虑到这一点,我怀疑当你打电话给QPainter::drawRect时,你的画笔会让画家活跃,导致你看到的灰色轮廓。

如果您只想填充矩形,那么您可以使用...

painter = QtGui.QPainter(self)
painter.fillRect(this->rect(), QBrush(QColor(170, 97, 112)))
相关问题