2016-07-05 5 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) 

そして、これは私は(Photoshopで編集した)得るものです:

enter image description here

あなたがはっきりと見ることができますxの両方の1ピクセルオフセット、左上のyディメンション

なぜこれが起こっているのだろうかと思っていました。私はxとyから1ピクセルを抽出し、幅と高さに1ピクセルを加えることでこれを取り除くことができるので、その値は次のようになります。 y = -1;幅= 21;高さ= 21

しかし、これはちょうど私に嫌な感じです。私はこれがQt(あるいは多分ちょうどPySide)の問題か、何かを理解していないかどうか分かりません。

+0

あなたのカスタムプッシュボタンのサイズは20×20で、まだ上記の画像は、長方形の22×22を示していると述べています。上の画像のどの部分が実際にあなたの*押しボタンですか? –

+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よく、私は "ヌルペン"という言葉を聞いたことはありませんでしたが、QPen(QtCore.Qt.NoPen)を意味するならば、私はすでに以前の "クリアペン"とこの行を交換しています。 – Makal

関連する問題