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

Alles rund um die Programmierung mit Qt
Antworten
uhu01
Beiträge: 150
Registriert: 10. Juli 2005 20:46

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

Beitrag 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
Zuletzt geändert von uhu01 am 14. Juli 2005 22:50, insgesamt 1-mal geändert.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

das muste glaube ich über die Fontmetrics machen
uhu01
Beiträge: 150
Registriert: 10. Juli 2005 20:46

Beitrag von uhu01 »

Hy!

Danke, genau das hab ich gebraucht!

mfg
uhu01
uhu01
Beiträge: 150
Registriert: 10. Juli 2005 20:46

Beitrag 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
Dateianhänge
lcars.zip
Die Font die ich verwende
(24.11 KiB) 189-mal heruntergeladen
Zuletzt geändert von uhu01 am 14. Juli 2005 22:58, insgesamt 1-mal geändert.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Gute Frage, ich konnte mich nur noch an ein beispiel aus dem Qt Buch erinnern.
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag 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
Zuletzt geändert von ArneStocker am 15. Juli 2005 09:31, insgesamt 2-mal geändert.
uhu01
Beiträge: 150
Registriert: 10. Juli 2005 20:46

Beitrag 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
uhu01
Beiträge: 150
Registriert: 10. Juli 2005 20:46

Beitrag 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
uhu01
Beiträge: 150
Registriert: 10. Juli 2005 20:46

Beitrag 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
uhu01
Beiträge: 150
Registriert: 10. Juli 2005 20:46

Beitrag von uhu01 »

Hy!

Hat niemand mehr ne Idee?

mfg
uhu01
Antworten