Seite 1 von 1

QPainter::drawText Breite,Höhe des Textes bestimmen

Verfasst: 14. Juli 2005 19:01
von uhu01
Hy!

Gibt es eine Möglichkeit, zu ermitteln wie Breit und Hoch (Pixel) ein Text sein wird, nachdem er mit drawText ausgegeben worden ist?

mfg
uhu01

Verfasst: 14. Juli 2005 19:49
von BartSimpson
das muste glaube ich über die Fontmetrics machen

Verfasst: 14. Juli 2005 19:57
von uhu01
Hy!

Danke, genau das hab ich gebraucht!

mfg
uhu01

Verfasst: 14. Juli 2005 22:49
von uhu01
Hy!

Welche Funktion von QFontMetrics muss ich denn verwenden?
Ich habe boundingRect und size ausprobiert. Alle Funktionen liefern mir Werte die zu Groß sind.
Das ist der Entsprechende Teil meines Code:

Code: Alles auswählen

...
m_fntText = QFont( "LCARS", 15);
...
QFontMetrics fontm( m_fntText);
QSize bdRect = fontm.size( 0, m_strText);
...
QString test;
test.sprintf("h[%d] w[%d]", bdRect.height(), bdRect.width());
QMessageBox::information( 0, "LCAR", test);
Hier bekomme ich eine Höhe von 23 und eine Breite von 25.
Das Problem: lt. Paint ist der ausgegebene Text nur 14*26 Pixel groß.
Brauche das ganze weil ich einen Text zentriert in ein Rechteck zeichnen muss.

Woran könnte das liegen? Verwende ich die falsche Funktion?

Für die die's ausprobieren wollen: der Text ist momentan "11-1" und die Font hab ich angehängt.

mfg
uhu01

Verfasst: 14. Juli 2005 22:56
von BartSimpson
Gute Frage, ich konnte mich nur noch an ein beispiel aus dem Qt Buch erinnern.

Verfasst: 14. Juli 2005 23:37
von ArneStocker

Code: Alles auswählen

QFontMetrics fontmetric(widget->font());
int width = fontmetric.width("das ist ein Text");
int height = fontmetric.height(); // korrektur :-)
Wahrscheinlich ist es nicht erlaubt, einfach null als Flag zu übergeben. Die in namespace.h definierten Flags sind sämtlich ungleich null. Übergib doch mal SingleLine.

Ausserdem, wenn ich das so richtig sehe, misst Du die Länge von m_strText (was steht da drin) und gibst aber test aus.

Gruss Arne

Verfasst: 14. Juli 2005 23:39
von uhu01
Hy!

Es wird noch besser: Verwende ich die QFontMetrics Klasse die ich von meinem QPainter nach fontMetrics() zurückbekomme gibt dieser an das der Text 23*29 groß währe?!

Ich blicke irgendwie nicht mehr durch.

mfg
uhu01

Verfasst: 15. Juli 2005 23:52
von uhu01
Hy!

Ich bin leider gerade erst nach Hause gekommen, werde das mit den Flags gleich morgen probieren.

In m_strText steht, wie oben schon geschrieben "11-1" und test gebe ich in einer MessageBox aus, um leicht an die ermittelten Werte zu kommen (siehe sprintf).

mfg
uhu01

Verfasst: 16. Juli 2005 10:17
von uhu01
Hy!

Ich habe jetzt statt

Code: Alles auswählen

QSize bdRect = fontm.size( 0, m_strText);
QSize bdRect = fontm.size( Qt::TextSingleLine, m_strText);
hilft aber leider auch nicht, kommt das gleiche dabei raus

Sonst noch irgend eine Idee?

Edit: könnte es sein dass die Ergebnisse noch irgendwie umgerechnet werden müssen?

mfg
uhu01

Verfasst: 19. Juli 2005 10:08
von uhu01
Hy!

Hat niemand mehr ne Idee?

mfg
uhu01