QLabel -> automatische Textgrössenanpassung an Fenstergrö

Alles rund um die Programmierung mit Qt
Antworten
mutex
Beiträge: 21
Registriert: 25. August 2009 10:28

QLabel -> automatische Textgrössenanpassung an Fenstergrö

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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.
mutex
Beiträge: 21
Registriert: 25. August 2009 10:28

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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;
mutex
Beiträge: 21
Registriert: 25. August 2009 10:28

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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);
}
Antworten