我正在尝试绘制尺寸为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中编辑):
您可以清楚地看到左上角的x和y尺寸都有1个像素偏移。
我想知道为什么会这样。我可以通过从x中提取1个像素来解决这个问题,并且在宽度和高度上添加1个像素,因此它们的值将为:x = -1; y = -1; width = 21;身高= 21。
但这对我来说感觉很奇怪。我不知道这是Qt(或者只是PySide)的问题,或者我不明白。
答案 0 :(得分:1)
我认为你对QPainter::drawRect
实际做的事情感到困惑。来自QPainter documentation
使用当前的笔和画笔绘制当前矩形。
矩形用当前画笔填充,并用当前笔勾画。考虑到这一点,我怀疑当你打电话给QPainter::drawRect
时,你的画笔会让画家活跃,导致你看到的灰色轮廓。
如果您只想填充矩形,那么您可以使用...
painter = QtGui.QPainter(self)
painter.fillRect(this->rect(), QBrush(QColor(170, 97, 112)))