Größe bei drawRect

Alles rund um die Programmierung mit Qt
Antworten
PoetikBiker
Beiträge: 41
Registriert: 2. Mai 2012 13:43

Größe bei drawRect

Beitrag von PoetikBiker »

Hallo zusammen,

Ich habe Probleme mit der Methode

Code: Alles auswählen

void QPainter::drawRect ( int x, int y, int width, int height )
Rufe ich die Methode mit den Parametern

Code: Alles auswählen

QPainter::drawRect(5, 5, 3, 3)
erhalte ich ein ein Quadrat, aber mit 4! Pixel Seitenlänge, nicht wie erwartet mit 3 :-(
Woran liegt das?
Kann man das vielleicht irgendwie einstellen (z.B. ein Zeichenmodus oder so etwas)?

Danke und Gruß
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Größe bei drawRect

Beitrag von franzf »

Steht doch in der Doku :P
A filled rectangle has a size of rectangle.size(). A stroked rectangle has a size of rectangle.size() plus the pen width.
(bei QPainter::drawRect ( const QRectF & rectangle ))
Du hast wohl kein gefülltes rect.
PoetikBiker
Beiträge: 41
Registriert: 2. Mai 2012 13:43

Re: Größe bei drawRect

Beitrag von PoetikBiker »

Code: Alles auswählen

QPainter	p(this);
QColor		colRed(255, 0, 0);
QColor		colBlue(0, 0, 255);

p.setPen(colRed);
p.setBrush(colBlue);
p.drawRect(5, 5, 3, 3);
Dieser Testcode liefert ein 4x4 großes Rechteck!
...und gefüllt ist es auch...
Dateianhänge
Das gezeichnete Rechteck!
Das gezeichnete Rechteck!
rect.jpg (2.24 KiB) 3370 mal betrachtet
PoetikBiker
Beiträge: 41
Registriert: 2. Mai 2012 13:43

Re: Größe bei drawRect

Beitrag von PoetikBiker »

ok, ok, jetzt hab ich es...

filled bezog sich nicht auf die Eigenschaft des Rechtecks das es gefüllt ist (ist es bei drawRect ja auch), sondern auf die Methode fillRect().

Aber dennoch finde ich das unterschiedliche Verhalten der Methoden drawRect() und fillRect() merkwürdig! Warum wurde das so gemacht?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Größe bei drawRect

Beitrag von franzf »

drawRect() und fillRect() sind halt unterschiedliche Sachen. Du bekommst zwar drawRect auch so hin, indem du einen Qt::NoPen als pen setzt, aber bequemer ist es in jedem Fall, wenn man nicht ständig alten pen speichern, NoPen setzen, drawRect, alten pen setzen machen muss (oder über painter.save/restore). Vielleicht ist es am Ende gar performanter ;)

Also nicht zu lange über die ähnlichen Funktionen nachdenken - einfach hinnehmen und gut ists ;)

Als kleine Lektüre kannst du dir ja mal das reinziehen: :P
http://www.gotw.ca/gotw/084.htm
Antworten