Länge eines Textes in Pixeln berechnen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
vorlautboy
User
Beiträge: 38
Registriert: Sonntag 7. Dezember 2008, 18:43

Sonntag 15. Februar 2009, 21:30

hallo leute,

ich möchte einen text mittels QPainter.drawText() in ein QWidget zeichnen, allerdings ist der text zu lang um in einer zeile dargestellt zu werden. kann man die länge, die der gezeichnete text später hat, schon im voraus berechnen/abschätzen, sodass alle zeilen möglichst gleich lang sind und nicht in der mitte eines wortes umgebrochen werden muss? schriftgröße und widgetfläche sind natürlich bekannt (bsp. 20 und 400x300).

Vielen Dank für eure Antworten
lunar

Sonntag 15. Februar 2009, 22:10

Wieso nutzt du nicht einfach die .drawText()-Methode, die ein QRect entgegen nimmt und den Text selbstständig umbricht?

Ansonsten kannst du QPainter.fontMetrics() aufrufen, um das aktuelle QFontMetrics-Objekt zu erhalten. Dessen ".boundingRect()"-Methoden erlauben dir, die Größe eines gegebenen Texts zu berechnen.
vorlautboy
User
Beiträge: 38
Registriert: Sonntag 7. Dezember 2008, 18:43

Montag 16. Februar 2009, 15:27

lunar hat geschrieben:Wieso nutzt du nicht einfach die .drawText()-Methode, die ein QRect entgegen nimmt und den Text selbstständig umbricht?
jo, das sieht gut aus! habs gerade ausprobiert, allerdings ohne erfolg :?
habe die methode so aufgerufen:

Code: Alles auswählen

paint.drawText(ev.rect(), QtGui.QTextOption.WordWrap,  text)
bin mir allerdings beim zweiten parameter nicht ganz sicher, in der doku steht nur "int flags"
lunar

Montag 16. Februar 2009, 15:37

vorlautboy hat geschrieben:
lunar hat geschrieben:Wieso nutzt du nicht einfach die .drawText()-Methode, die ein QRect entgegen nimmt und den Text selbstständig umbricht?
jo, das sieht gut aus! habs gerade ausprobiert, allerdings ohne erfolg :?
habe die methode so aufgerufen:

Code: Alles auswählen

paint.drawText(ev.rect(), QtGui.QTextOption.WordWrap,  text)
bin mir allerdings beim zweiten parameter nicht ganz sicher, in der doku steht nur "int flags"
Die Ursache des fehlenden Erfolgs lässt sich ohne Quellcode nicht feststellen. Die möglichen Flags sind in der Doku im Übrigen durchaus dokumentiert.
vorlautboy
User
Beiträge: 38
Registriert: Sonntag 7. Dezember 2008, 18:43

Montag 16. Februar 2009, 17:51

lunar hat geschrieben:
...
Die Ursache des fehlenden Erfolgs lässt sich ohne Quellcode nicht feststellen. Die möglichen Flags sind in der Doku im Übrigen durchaus dokumentiert.
jupp, hab' sie gerade gefunden (standen nur ein paar zeilen drüber :roll: ). die zeile muss also richtig lauten:

Code: Alles auswählen

paint.drawText(ev.rect(), QtCore.Qt.TextWordWrap,  text)
Besten Dank!
vorlautboy
User
Beiträge: 38
Registriert: Sonntag 7. Dezember 2008, 18:43

Sonntag 22. Februar 2009, 16:29

hmm, klappt doch noch nicht so wie gewünscht. ich verwende jetzt als display-widget ein QTextEdit fenster, das den text ja automatisch umbricht. ich würde jetzt nur gern sehen, wo der text umgebrochen wurde, nachdem ich mit setPlainText() einen text eingefügt habe.
kann man sich bspw. den text mit newline-markierungen dort, wo der text umgebrochen wurde, zurückgeben lassen? also wenn man einen text in das edit-fenster einfügt, der zu lang für eine zeile ist, und ihn dann wieder ausliest, sollen dort, wo im fentser zeilenumbrüche sind, newline's stehen, geht sowas?
lunar

Samstag 28. Februar 2009, 17:49

Mit QTextEdit afaik nicht, möglicherweise findest du in der Doku von QPlainTextEdit etwas.

Was ist den überhaupt dein Ziel? Wozu benötigst du die sichtbaren Zeilenumbrüche?
Antworten