Qt3 : QFontMetrics



  • Ich ermittle über QFontmetrics die Zeilenhöhe (lineSpacing) für das Drucken von Text.

    Und obwohl es sich nicht um eine "exotische" Schrift handelt (Courier in Grösse 11),
    erhalte ich auf verschiedenen PCs mit verschiedenen Druckern, aber gleicher Auflösung (600dpi)
    verschiedene Zeilenhöhen.
    Allerdings sind auch die installierten Distributionen völlig verschieden.
    Auf dem einen PC erhalte ich als lineSpacing 16,
    auf dem anderen 14.
    Wie kommt das ?
    Was mache ich falsch ?
    Oder hängt das mit der verschiedenen Bildschirmauflösung zusammen ?
    (auf dem einen 1024x768, auf dem anderen 800x600)

    Oder weil es verschiedene GUI's sind ?
    (auf dem einen KDE , auf dem anderen etwas mir unbekanntes)



  • Mit QFontMetrics bekommst du die Pixelgrößen der Schriften auf dem Bildschirm.
    Da eine 12pt Schrift nun auf einem 800x640 17" Bildschirm genauso groß ist wie auf einem 2800x2400 17" Bildschirm, unterscheidet sich die Anzahl der Pixel die für die Schrift auf den verschiedenen Bildschirmen verwendet werden. Beim 2800x2400 17" Bildschirm werden wesentlich mehr Pixel für die Schrift verwendet als auf dem anderen. Deshalb sind auch die Werte anders, die du zurückbekommst.

    Wenn du mit der Auflösung des Druckers arbeiten willst musst du beim Konstruieren des QFontMetrics das richtige QPaintDevice angeben. Ansonsten wird der Bildschirm verwendet.



  • Ich meine schon, dass ich das "richtige" QFontmetrics verwende:
    texthoehe=((QPainter*)druckparam->dc)->fontMetrics().lineSpacing();

    Zum Verständnis:
    In "druckparam->dc" steht &p, das ist der painter:
    QPainter p;
    p.begin(druckparam->printer);
    druckparam->dc=&p;
    ...

    Trotzdem ist der Zeilenabstand auf den beiden ausgedruckten Papieren
    verschieden, d.h. in einem Fall passen 60 zeilen auf eine Seite,
    im anderen etwa 72.

    Ich möchte aber, dass dergleiche Text ausgedruckt in jedem Fall gleich aussieht.


Anmelden zum Antworten