Problem beim boundingrect von Textlabels mit QGraphics

Verschiedenes zu Qt
Antworten
spatro
Beiträge: 46
Registriert: 18. Juni 2008 10:54

Problem beim boundingrect von Textlabels mit QGraphics

Beitrag von spatro »

Hallo,

ich habe ein Problem bei der Erstellung des boundingRects, bzw. des Shapes, bei einem einfachen Textlabel

Ich zeichne den Text in der paint Funktion auf folgende Art und Weise:

painter->setFont(QFont("Arial");
painter->setPointSize(10);
QString text="Text";
QRect maxRect=painter->window();
QRectF textRect=painter->boundingRect(maxRect,text);
painter->drawText(textRect,text);
painter->drawRect(textRect);

Das funktioniert auch ganz gut, aber wie kann ich das boundingRect erzeugen, wo ich ja keinen QPainter mit den entsprechenden Eigenschaften zur Verfügung habe.

Vielen Dank schon mal für die Hilfe!

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

Beitrag von franzf »

Schau dir mal
QFontMetrics(F)
an. Und das mit maxRect brauchts eigentlich nicht, dein viewPort begrenzt eh, was zu sehen ist. Wenn du Scrollbars verhindern willst, setz doch die entsprechenenden Policies.
spatro
Beiträge: 46
Registriert: 18. Juni 2008 10:54

Beitrag von spatro »

Danke für die schnelle Antwort.

Das Problem bei QFontMetrics ist, dass man auch hier ein PainDevice braucht. Also, wenn ich das mit den FontMetrics ohne Paindevice erstellte boundingRect am Bildschirm darstelle, dann passt das, wenn man es dann allerdings mit höherer Auflösung druckt, dann schrumpft es.

Der Text bleibt natürlich gleich groß, also ist das boundingRect dann zu klein.

Die einzige Möglichkeit die mir noch einfällt, ist das boundingRect während des Zeichnens zu erstellen, aber dann kann man bei einem noch nicht gezeichneten Label die Größe nicht feststellen, bzw. wenn man Drucken will und zur Anordnung der Elemente das boundingRect braucht, muss man zwei mal drucken, damit es vorher angepasst wird. Das muss doch auch eleganter gehen.
Antworten