Seite 1 von 1
QPainter und drawText
Verfasst: 7. August 2014 12:01
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?
Re: QPainter und drawText
Verfasst: 7. August 2014 14:01
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.
Re: QPainter und drawText
Verfasst: 8. August 2014 09:10
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?
Re: QPainter und drawText
Verfasst: 8. August 2014 21:37
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.
Re: QPainter und drawText
Verfasst: 9. August 2014 10:56
von Christian81
QPrinter ist ein QPaintDevice und dort kann man die aktuellen DPI-Werte abholen um damit zu rechnen.
Re: QPainter und drawText
Verfasst: 11. August 2014 11:46
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?
Re: QPainter und drawText
Verfasst: 12. August 2014 15:29
von nelo
Problem hat ich gelöst und das Zauberwort war WordWrap.
Re: QPainter und drawText
Verfasst: 1. September 2014 17:49
von sigvdr
Wie bekomm ich nun heraus welche größe der Text hat?
QRect QFontMetrics::boundingRect(.........)
Gruß Sig