QPainter und drawText

Verschiedenes zu Qt
Antworten
nelo
Beiträge: 21
Registriert: 29. Mai 2014 17:40

QPainter und drawText

Beitrag von nelo »

Hallo,

ich habe da ein kleines Verständniss Problem.
Und zwar lasse ich mir einen text Zeichnen mittels
painter->drawText(QRect(100,100,500,200), Qt::AlignLeft, "Ein belieiger text");
Damit wird ja nun ein Rechteck gezeichnet indem der Text steht.
Wie bekomm ich nun heraus welche größe der Text hat?
Ich habe den text vorher in ein label schreiben lassen, das label auf die Textbreite vergrößert und mir diese dann ausgeben lassen.
QLabel *label = new QLabel;
label->setText("Ein beliebiger text");
label->adjustSize;
qDebug()<<"label größe: "<<label->size().width();
QRect hat ja eine x breite von 500 bekommen. Wenn ich mir die label breite ausgeben lasse kommt da 81 raus.
Ist die breite (width) des labels nun gleichzusetzen zu der x breite des QRect?
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: QPainter und drawText

Beitrag von veeman »

Du kannst auch anstatt eines Rechtecks einen Punkt angeben, dann wird der Text nicht abgeschnitten (insofern er sich in der Größe der Zeichenfläche befindet).
Ansonsten kannst du QFontMetrics verwenden um die Größe des Textes zu berechnen.

Die Breite die du von QLabel zurück bekommst muss nicht zwangsweise die Breite des dargestellten Textes sein.
nelo
Beiträge: 21
Registriert: 29. Mai 2014 17:40

Re: QPainter und drawText

Beitrag von nelo »

Ok hab mir jetzt die korrekte breite des textes ausgeben lassen.
Das Problem ist jetzt,
Wenn ich mir den Text in einem Rechteck zeichnen lasse, wo das Rechteck die Breite des Textes hat, passt alles noch wenn ich mir das ganze auf dem Monitor ausgeben lasse der 96 dpi hat.
Wenn ich aber auf einen Drucker gehe der 600 dpi hat passt gar nichts mehr. Normalerweise müsste man ja nun die Breite des Textes mal den Faktor nehmen, also 600/96 = 6.25, aber wenn ich das Rechteck zeichnen lassen will passt der Text einfach nicht mehr hinein.

Bei meinen Beispiel hat der text eine Breite von 81, also zeichne ich mein rechteck mit den werten und auf den monitor mit 96 dpi.

Code: Alles auswählen

painter->drawText(QRect(100,100,81,16), Qt::AlignLeft, "Ein belieiger text");
painter->drawRect(QRect(100,100,81,16)); //Alles super der Text passt in das Rechteck

Nun erhöhe ich die Resolution auf 600 und rechne mir meinen Faktor aus

Code: Alles auswählen

painter->drawText(QRect(100 * 6.25, 100 * 6.25, 81 * 6.25, 16 * 6.25), Qt::AlignLeft, "Ein belieiger text");
painter->drawRect(QRect(100 * 6.25, 100 * 6.25, 81 * 6.26, 16 * 6.25)); //Der Text ist nun zu groß und passt nicht in das Rechteck
Wo liegt mein Denkfehler?
veeman
Beiträge: 277
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: QPainter und drawText

Beitrag von veeman »

Wie ermittelst du die DPI des Monitors und wie des Druckers?

Auch wenn der Drucker 600dpi kann, stellt sich halt die Frage ob dieser auch auf 600 eingestellt ist.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QPainter und drawText

Beitrag von Christian81 »

QPrinter ist ein QPaintDevice und dort kann man die aktuellen DPI-Werte abholen um damit zu rechnen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
nelo
Beiträge: 21
Registriert: 29. Mai 2014 17:40

Re: QPainter und drawText

Beitrag von nelo »

Meine Monitor Resolution ermittel ich mir per

QDestopWidget::logicalDpiX();

Der Drucker ist Standartmäsig auf 600 Dpi eingestellt. Um das ganze zu testen lasse ich mir aber alles auf ein PDF ausgeben wo ich vorher die Dpi mittels
"setResolution(600)"
einstelle um den Drucker zu simulieren.

Mit der normalen Monitor Dpi passt alles von der Breite aber wenn ich auf 600 Dpi hochgehe passt es nicht mehr.
Daher meine Frage. Kann man die Textbreite mit der QRect breite gleichsetzen oder sind das unterschiedliche werte?
nelo
Beiträge: 21
Registriert: 29. Mai 2014 17:40

Re: QPainter und drawText

Beitrag von nelo »

Problem hat ich gelöst und das Zauberwort war WordWrap.
sigvdr
Beiträge: 100
Registriert: 1. Juli 2008 19:29

Re: QPainter und drawText

Beitrag von sigvdr »

Wie bekomm ich nun heraus welche größe der Text hat?
QRect QFontMetrics::boundingRect(.........)

Gruß Sig
Antworten