2016-07-05 6 views
0

Ich versuche, meine benutzerdefinierte Schaltfläche mit den Abmessungen 20x20 Pixel zu zeichnen. Ich habe eine Klasse, die QPushButton erbt, und ich habe unten mit diesem Code paintEventO Methode überschrieben:PySide QPainter.drawRect() mit QBrush Offset Ausgabe

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) 

Und das ist, was ich (in Photoshop bearbeitet) erhalten:

enter image description here

Sie können deutlich sehen, 1 Pixel Offset sowohl in x, als auch in y Dimensionen oben links.

Ich habe mich gefragt, warum das passiert. Ich kann das loswerden, indem ich 1 Pixel aus x und y extrahiere und 1 Pixel zu Breite und Höhe addiere, so dass ihr Wert lautet: x = -1; y = -1; Breite = 21; Höhe = 21.

Aber das fühlt sich einfach komisch an. Ich weiß nicht, ob das ein Problem mit Qt ist (oder vielleicht nur PySide) oder ich verstehe etwas nicht.

+0

Sie feststellen, dass Ihre benutzerdefinierten Druckknopf 20x20 Größe ist noch das Bild über ein Rechteck 22x22 zeigt. Welcher Teil des obigen Bildes ist eigentlich * dein * Druckknopf? –

+0

@ G.M. Nein, es ist tatsächlich 20x20. Ich habe den Knopf mit einem roten Pinsel markiert (von 0 bis 20). Das Bild selbst ist so abgeschnitten. Entschuldigung, wenn das in irgendeiner Weise verwirrend ist. – Makal

Antwort

1

Ich denke, dass Sie verwirrt darüber, was QPainter::drawRect tatsächlich tut. Von der QPainter documentation

Zeichnet das aktuelle Rechteck mit dem aktuellen Stift und Pinsel.

Das Rechteck wird mit dem aktuellen Pinsel gefüllt und mit dem aktuellen Stift umrahmt. In diesem Sinne vermute ich, dass, wenn Sie QPainter::drawRect anrufen, Sie einen Stift aktiv für den Maler haben, der den grauen Entwurf verursacht, den Sie sehen.

Wenn alles, was Sie wollen, verwenden Sie können das Rechteck füllen dann ...

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

Ja, es stellt sich heraus, dass ich "clear pen" erklären muss "QPen (QColor (0, 0, 0, 0), 1, QtCore.Qt.SolidLine)" und gebe es QPainter, sonst wenn ich nicht setze Jeder Stift für QPainter wird seinen eigenen Standard verwenden (grau 1px solid). – Makal

+0

@Makal Kennen Sie den Nullstift? Vielleicht wollen Sie das, wenn Sie keinen Stift wollen. –

+0

@KubaOber Nun, ich habe nie von dem Begriff "Nullstift" gehört, aber wenn du QPen (QtCore.Qt.NoPen) meinst, dann tausche ich diese Zeile bereits mit meinem vorherigen "klaren Stift" - funktioniert genauso, nur kürzer. – Makal