Hallo an Alle!
Ich habe eine kurze Frage zum QPushButton.
Gibt es eine Möglichkeit, Text der zu groß für eine Zeile ist, automatische auf mehere Zeilen zu verteilen?
Also so:
Aktueller Stand:
#########
# #
#hr Langer T#
# #
# #
#########
So sollte es sein:
#########
# Sehr #
# Langer #
# Text #
# #
#########
[gelöst]Zeilenumbruch QPushButton
-
CaptnChaos
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
[gelöst]Zeilenumbruch QPushButton
Zuletzt geändert von CaptnChaos am 5. März 2008 13:53, insgesamt 1-mal geändert.
-
CaptnChaos
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
Sollte sich nochmal jemand diese Frage stellen: hier eine kleine Helfer-Funktion. str ist der String, der Formatiert werden soll, w ist die Breite des Buttons(int pixeln).
EDIT!!! Obelix hat mich auf einige Mängel aufmerksam gemacht.
EDIT!!! Obelix hat mich auf einige Mängel aufmerksam gemacht.
Code: Alles auswählen
QString Widget::zeilenBruch(QString str, int w)
{
QFontMetrics fm(QFont("Arial", 16,16));
int pl = -1, zl = 0;
int bl = 0;
for(int c = 0; c < str.length(); ++c)
{
bl += fm.width(str[c]);
if(str[c] == ' ')
{
pl = c;
qDebug(QByteArray::number(c));
}
if(bl >= w)
{
if(pl == -1)
{
str.insert(c, "\n");
str.insert(c, "-");
}
else
{
str.replace(pl, 1, "\n");
c = pl;
}
pl = -1;
bl = 0;
}
zl++;
}
return str;
}
Zuletzt geändert von CaptnChaos am 6. März 2008 13:39, insgesamt 3-mal geändert.
hmm ... welche aufgabe hat denn zl (vom hochzählen und null setzen mal abgesehen) ?
und ab der zweiten zeile dürfte in den meisten fällen der umbruch auch nicht mehr stimmen und der text zu lang werden. beim einfügen des zeilenumbruch setzt du die nötige-breite-zählung auf 0 zurück. die bereits gezählten breiten der zeichen von diesem zeilenumbruch bis zum aktuellen zeichen geht dabei natürlich verloren. du müßtest die breite seit dem letzten SPACE für die nächste zeile berücksichtigen. jetzt beachtest du nichteinmal die breite des akuellen zeichens bei dem der umbruch nötig wurde.
und als drittes gehts auch dann schief, wenn der text aus einem zu langen wort besteht. dann replace'st du nämlich den ersten buchsten des wortes mit dem zeilenumbruch.
ganz schön buggy die paar zeilen
(oder ich habs nur nicht richtig verstanden)
MfG Obel
und ab der zweiten zeile dürfte in den meisten fällen der umbruch auch nicht mehr stimmen und der text zu lang werden. beim einfügen des zeilenumbruch setzt du die nötige-breite-zählung auf 0 zurück. die bereits gezählten breiten der zeichen von diesem zeilenumbruch bis zum aktuellen zeichen geht dabei natürlich verloren. du müßtest die breite seit dem letzten SPACE für die nächste zeile berücksichtigen. jetzt beachtest du nichteinmal die breite des akuellen zeichens bei dem der umbruch nötig wurde.
und als drittes gehts auch dann schief, wenn der text aus einem zu langen wort besteht. dann replace'st du nämlich den ersten buchsten des wortes mit dem zeilenumbruch.
ganz schön buggy die paar zeilen
MfG Obel
-
CaptnChaos
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
Das ich die Breite zählung zurücksetze ist absicht.
die schleife zählz dann wieder solange bis bl größer als w ist.
das muss für jede neue Zeile unabhängig von der vorherigen geschehen.
zl war noch aus meinem ersten ansatz. ein wort trenne ich jetzt einfach nach dem letzten buchstaben der noch "rein passt".
danke für das feedback
.
die schleife zählz dann wieder solange bis bl größer als w ist.
das muss für jede neue Zeile unabhängig von der vorherigen geschehen.
zl war noch aus meinem ersten ansatz. ein wort trenne ich jetzt einfach nach dem letzten buchstaben der noch "rein passt".
danke für das feedback