Seite 1 von 1
QLabel -> automatische Textgrössenanpassung an Fenstergrö
Verfasst: 14. Januar 2010 14:28
von mutex
Hallo QTGemeinde
Mal wieder ein kleines Problem - ich habe ein Label, in dem ein Text angezeigt wird. bei der Größenveränderung des parentwidgets soll nun auch der text entsprechend grösser werden, sprich die Textgröße soll sich dem aktuellen parentwidgets anpassen.
Wie kann ich das mit einem Text realisieren? Nur über Painter???
Besten Dank
Grüsse
Verfasst: 14. Januar 2010 15:00
von AuE
Nein,
ich mach das in dem ich mir das bouinding Rect des Labels ansehe und dann schaue welche Größe via QFontMetrics dort hinein passt.
Verfasst: 15. Januar 2010 08:16
von mutex
Hallo,
danke für den Gedankenanstoß. Mir ist nur leider noch unklar wie ich hier das Größenverhältnis raus rechnen soll. Bei mir wäre es nun so:
ich hab eine Groupbox in der ein label liegt. im label steht etwas text. Demnach muß das label immer so groß sein wie platz in der groupbox ist und der text immer so groß wie platz im label. Der erste fall ergibt sich ja automatisch durch layouts. nur der text müsste beim Resize des Fensters nachskaliert werden.
Hättest du vielleicht ein paar Zeilen Code als Beispiel um auf den richtigen Weg zu kommen.
Besten Dank
Verfasst: 15. Januar 2010 08:26
von AuE
Hi,
habe leider imho Urlaub von daher aus den Gedanken:
Hol dir beim resize Event das boundingRect deines Labels (das ist der Platz den du hast) und danach prüfst du mit QFontMetrics ob dein Text in das bounding rect passt. (da gibts ne Methode die nen String als Para hat und dir dessen Größe in px liefert)
Dann kannst du halt probieren wie lange du die Fontqröße erhöhen kannst...
Code: Alles auswählen
// ACHTUNG PSEUDO CODE
while (FontMetrix->size("bla") <boundingRect)
FontMetrix->font().pointSizeF() = FontMetrix->font().pointSizeF() + 1;
Verfasst: 15. Januar 2010 08:35
von mutex
hui Urlaub und doch so schnell geholfen - Prima - Danke! - Werd´s gleich mal in die Tat umsetzen und schaun, ob das so funktioniert.
Grüsse
Verfasst: 15. Januar 2010 09:32
von AuE
Grade was zusammen geklickt als Ansatz:
Code: Alles auswählen
bool Widget::eventFilter(QObject *obj, QEvent *ev)
{
qDebug() << ui->label->text();
if (obj == ui->label && ev->type() == QEvent::Resize )
{
qDebug() << "Label size is:" << ui->label->size();
QFontMetrics fontMetrics( ui->label->font() );
qDebug() << "Label font size is:" << fontMetrics.boundingRect( ui->label->text()).size() ;
}
return QWidget::eventFilter(obj,ev);
}