2016-07-05 1 views
0

크기가 20x20 픽셀 인 맞춤 푸시 버튼을 그려야합니다. 나는 QPushButton을 상속하는 클래스를 생성하고 난 다음이 코드 paintEvent 방법을 덮어했다 :PySide QPrinter 오프셋 문제가있는 QPainter.drawRect()

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) 

그리고 이것은 내가 (포토샵에서 편집) 무엇을 얻을 :

enter image description here

당신은 명확하게 볼 수 있습니다 x에서 1 픽셀 오프셋, 왼쪽 상단에서 y 치수.

왜 이런 일이 일어나고 있는지 궁금합니다. x와 y에서 1 픽셀을 추출하고 너비와 높이에 1 픽셀을 추가하여이 값을 제거 할 수 있습니다. 따라서 x = -1; y = -1; 폭 = 21; 높이 = 21.

그러나 이것은 나에게 이상한 느낌입니다. 이 문제가 Qt (또는 아마도 PySide)와 관련이 있는지 알지 못하거나 뭔가를 이해하지 못합니다.

+0

당신은 사용자 정의 푸시 버튼의 크기는 20 × 20 아직 이미지가 위의 사각형 22x22을 보여줍니다이라고 언급. 위 이미지의 어느 부분이 실제 * 푸시 버튼입니까? –

+0

@ G.M. 아니, 실제로는 20x20입니다. 나는 빨간 붓으로 단추를 표시했다. (0에서 20까지). 이미지 자체는 이와 같이 잘립니다. 이것이 혼란 스럽다면 미안합니다. – Makal

답변

1

실제로는 QPainter::drawRect에 대해 혼란스러워합니다. QPainter documentation

현재 펜과 브러쉬로 현재 사각형을 그립니다.

사각형은 현재 브러시로 채워지고 현재 펜으로 윤곽이 지정됩니다. 그 점을 염두에두고 나는 QPainter::drawRect으로 전화하면 화가가 볼 수있는 회색 윤곽선을 유발하는 펜이 활성화되어 있다고 생각합니다.

당신이 원하는 모든 당신이 사용할 수있는 사각형을 채울 경우

...

painter = QtGui.QPainter(self) 
painter.fillRect(this->rect(), QBrush(QColor(170, 97, 112))) 
+0

그래, "QPen (QColor (0, 0, 0, 0), 1, QtCore.Qt.SolidLine)"을 선언하고 QPainter에 전달해야한다. 그렇지 않으면 설정하지 않으면 QPainter 용 펜은 기본 (회색 1px 솔리드)을 사용합니다. – Makal

+0

@Makal 널 펜 알고 계십니까? 펜을 원하지 않는다면 원하는 것이 겠지요. –

+0

@KubaOber 글쎄, 나는 "null pen"이라는 용어에 대해 들어 본 적이 없지만 QPen (QtCore.Qt.NoPen)을 뜻한다면, 나는 이미 이전의 "clear pen"으로이 줄을 바꾼다. – Makal