Unterschiedliche Testgrüßen mit QPainter zeichnen

Alles rund um die Programmierung mit Qt
Antworten
bp
Beiträge: 44
Registriert: 21. Januar 2009 11:25

Unterschiedliche Testgrüßen mit QPainter zeichnen

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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?
bp
Beiträge: 44
Registriert: 21. Januar 2009 11:25

Beitrag 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:
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
bp
Beiträge: 44
Registriert: 21. Januar 2009 11:25

Beitrag von bp »

Danke erst mal für die Antworten.
Ich werde das imlaufe des Tages mal austesten und dann bescheid geben.

bp
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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);
bp
Beiträge: 44
Registriert: 21. Januar 2009 11:25

Beitrag von bp »

Danke, das funktioniert super. :D :D
Antworten