[gelöst] Breite des Texts in QLabel begrenzen

Alles rund um die Programmierung mit Qt
Antworten
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

[gelöst] Breite des Texts in QLabel begrenzen

Beitrag von osiris81 »

Hallo,

Ich habe ein QLabel mit fixer Breite (resp. es erhält durch das Layout eine gewisse Breite) .

In dieses Label wird ein QString geschrieben. Falls der QString nun aber so lang ist, dass er nicht im QLabel Platz hat, wird das Label einfach verbreitert. Dies möchte ich verhindern, indem der String gekürzt wird und "..." angehängt (So wie das bei Listen auch gemacht wird).

Hat jemand eine Ahnung wie ich das hinbekomme?
Zuletzt geändert von osiris81 am 5. Mai 2010 17:55, insgesamt 1-mal geändert.
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag von Nvidia »

du überlegst dir wie lange der QString sein darf, also z.b. 20 Zeichen
(pass auf manche Zeichen sind größer "M & W sind relativ lange Zeichen")
Testest mit QString.Size() ob es größer oder kleiner ist.
Wenn er kleinergleich ist fügst du ihn ein
wenn er größer ist
int i = QSize();
QString.replace(20,i,"...")

fertig so würde ich das machen.
nvidia
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Beitrag von osiris81 »

Hallo,

Danke für die Antwort. Wie Du selber schon bemerkt hast, ist das Problem hier, dass nicht alle Zeichen gleich breit sind (es können alle Unicode Zeichen verwendet werden, also kann ich auch nicht davon ausgehen, dass ein "M" am breitesten ist).

Mit QFontMetrics kann ich allerdings herausfinden, wie breit mein QString wird. Nur, falls er zu breit ist, müsste ich nach und nach ein Zeichen entfernen und das ganze nochmals probieren, da müsste es doch etwas effizienteres geben?
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag von Nvidia »

Naja entweder du machst das so wie du das beschrieben hast mit einer while schleife.
Was mir noch eingefallen wäre, weiß aber nicht ob das funktioniert.
Du könntest die averageCharWidth () ausrechnen
und dann die berechnest Weite - maximale Weite des QLabels und das Ergebnis durch die average char width teilen und so viele Zeichen entfernen, wie dort rauskommt entfernenen + ein paar für ...
Ich würds mal ausprobieren.
nvidia
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag von Nvidia »

ok btw. bei deiner FontMetrik klasse gibst das hier
QString QFontMetrics::elidedText ( const QString & text, Qt::TextElideMode mode, int width, int flags = 0 ) const

If the string text is wider than width, returns an elided version of the string (i.e., a string with "..." in it). Otherwise, returns the original string.

nvidia
osiris81
Beiträge: 19
Registriert: 23. Juli 2008 14:10

Beitrag von osiris81 »

Super, vielen Dank!

QFontMetrics::elidedText macht genau was ich gebraucht habe!
Antworten