# Qt QPainter schrift in Rechteck zeichnen



## Orbit (28. September 2009)

Hallo,
wie kann ich einen Buchstaben aus einer Font mit QPainter zeichnen, sodass er unabhängig von der gesetzten Schriftgröße der Font in ein bestimmtes Rechteck gemalt wird?

void drawText ( const QRect & rectangle, int flags, const QString & text, QRect * boundingRect = 0 )

Geht irgendwie nicht so wie ich es verstehe.
Wozu genau ist das zweite Rechteck da?

LG Orbit


----------



## andy72 (12. Oktober 2009)

Moin,

drawText(...) ist scho richtig - das boundingRect beschreibt den Platz, den Dein Text einnimmt, das erste QRect die Fläche auf der er "gezeichnet" werden soll.

das boundingRect bekommst Du folgend heraus:

```
void DEIN_QWIDGET_CLASSNAME::paintEvent(QPaintEvent *event) {
  Q_UNUSED(event); // event wird hier ignoriert
  QPainter painter(this); // initialisiere QPainter Object
  QString txt = "DEIN TEXT";
  QFontMetrics metrics = fontMetrics(); // geht NUR in einem QWidget!
  QRect boundingRect = metrics.boundingRect(txt); // ermittle Fläche des Textes
  int flags = Qt::AlignCenter; // zentriere Text
  painter.drawText(contentsRect(), flags, txt, &boundingRect); // zeichne Text
  painter.end(); // Vorgang abschließen
}
```

Weitere Doku hier: http://doc.trolltech.com/4.5/qpainter.html#drawText-11

LG
Andy


----------



## Orbit (12. Oktober 2009)

Hallo,

muss ich dann die Font per pixelGröße verändern? also sagen wir es soll ein "E" von 3,4 zu 8, 9 gezeichnet werden. Dann lasse ich mir bei beliebiger Schriftgröße das boundingRect von "E" geben und skaliere dann die pixelGröße der Schrift sodass es passt oder wie?

LG;
Orbit


----------



## andy72 (12. Oktober 2009)

Das kannst Halten wie Du willst,

die Font-Size bekommst Du ja mit

```
QFont fnt = font();
int size = fnt.pixelSize();
```

im Object heraus - dort kannst Du nötigenfalls mit

```
QFont fnt = font();
int size = fnt.pixelSize();
if( size > 12 ) {
  fnt.setPixelSize(12);
  object.setFont(fnt);
}
```

die Schriftgröße ändern - also die Schriftgröße Deinem Widget anpassen
so daß alles in Dein Rect passt 

LG


----------

