Seite 1 von 1

Unterschiedliche Testgrüßen mit QPainter zeichnen

Verfasst: 6. Juli 2009 14:59
von bp
Hallo,

ich habe ein Fenster, in dem an verschiedenen Stellen Text steht.
dieser sollte aber auch unterschiedlich groß sein.
bisher habe ich das so gelöst.

Code: Alles auswählen

SvgDialog::paintEvent(event);
    QPainter painter(this);

    QFont font;
    font.setPixelSize(8);
    setFont(font);
    QPen pen;
    pen.setColor(QColor(127, 198, 101));
    painter.setPen(pen);
    painter.drawText(25,30, m_sLabel);


    for(int i = 0, k = 222; i <= m_iValue * 2; i++, k -= 8)
    {
        painter.fillRect(QRect(174, k, 26, 4), QColor(56, 178, 60, 255));
    }

    font.setPixelSize(16);
    setFont(font);
    painter.drawText(280, 225, tr("ESC"));
    painter.drawText(330, 225, tr("OK"));

    painter.end();
Doch leider bekomme ich nur eine einzige Schriftgröße. und zwar die mit 16 Pixel.

Bin für jede Hilfe dankbar.

bp

Verfasst: 6. Juli 2009 16:37
von upsala
Ist das richtig zu verstehen, daß der Text der in m_sLabel steht, die gleiche Größe hat, wie der Text 'ESC' und 'OK'?
Und was hat die for-Schleife mit deiner Frage zu tun?

Verfasst: 6. Juli 2009 19:18
von bp
Ganz genau. Die haben die selbe Größe, was ja eigentlich nach meiner Logik nicht sein sollte.

Die for-Schleife hat mit meinem Problem nichts bis gar nichts zu tun. Habe sie nur vergessen zu löschen :oops:

Verfasst: 7. Juli 2009 08:50
von franzf
Geht das?

Code: Alles auswählen

QFontMetricsF mf(QApplication::font());
QRectF okRect = mf.boundingRect("OK")*1.2;
QRectF escRect = mf.boundingRect("ESC")*1.5;
okRect.moveTo(100, 200);
escRect.moveTo(400, 200);
painter.drawText(okRect, "OK");
painter.drawText(escRect, "ESC");
Solte vom Prinzip her funktionieren.

Grüße
Franz

Verfasst: 7. Juli 2009 09:02
von upsala
Die Textgröße wird vom Font vorgegeben und nicht vom 'boundingRect'.

Ich würde es eher auf den gewählten Font schieben und mal einen anderen Font auswählen.

Verfasst: 7. Juli 2009 10:17
von bp
Danke erst mal für die Antworten.
Ich werde das imlaufe des Tages mal austesten und dann bescheid geben.

bp

Verfasst: 7. Juli 2009 10:37
von franzf
Es ist nicht der Font.
Ich habs versucht, und es funktioniert, wenn du nicht dem "this" sondern dem "painter" den font zuweist:

Code: Alles auswählen

painter.setFont(font);

Verfasst: 8. Juli 2009 16:20
von bp
Danke, das funktioniert super. :D :D