Seite 1 von 1

QGraphicsTextItem: max-width (oder etwas in der Art)

Verfasst: 15. Mai 2010 18:08
von EdgarButan
Hallo,

so langsam werde ich ein bisschen frustriert.
Mein Anliegen ist scheinbar ein ganz simples: ich möchte den Platz, den ein der Text eines QGraphicsTextItem einnimmt, begrenzen.
Soll heißen:
ich möchte festlegen können, dass der Text maximal z.B. 200 Pixel seitlich einnimmt. Ist der Text länger, soll ein Zeilenumbruch stattfinden.
Ist der Text kürzer, soll sich das QGraphicsTextItem jedoch nicht unnötig in die Länge ziehen.

Ich weiß nicht, auf welche Art und Weise ich das einstellen soll.
Das Naheliegendste wäre natürlich:

Code: Alles auswählen

QGraphicsTextItem::setWidth()
Leider liefert mir dieser Befehl oben beschriebenes, NICHT erwünschtes Verhalten, dass ein QGraphicsTextItem mit kurzem Text trotzdem die vollen 200 Pixel einnimmt, also seitlich eine weiße Fläche beinhaltet.

Dann dachte ich, dass ich das Ganze wohl als Html setzen muss, also mit

Code: Alles auswählen

QGraphicsTextItem::setHtml(text)
und dafür ein CSS-Stylesheet definieren muss.

Laut „QGraphicsTextItem::toHtml()“ verwendet Qt zur Darstellung von „text“ einen Absatz, also <p>.
Nun ist es aber so, dass das zu diesem Zweck von CSS zur Verfügung stehende „max-width“, das im Standard auch für <p> zur Verfügung steht, schlichtweg nicht interpretiert wird.
Genau verfolgen kann ich dieses Fehlverhalten leider nicht, da sich meine Angaben nicht in der Ausgabe von „toHtml()“ niederschlagen. Bzw. nur teilweise. (Oder ist das gar beabsichtigt?)
Wenn ich

Code: Alles auswählen

QGraphicsTextItem::setHtml('<a href="blabla">' + text + '</a>')
verwende (Hinweis: ich benutze Python, die Syntax ist so also in Ordnung ;)), wird dieser zusätliche <a>-Teil in „toHtml()“ angezeigt.
Wenn ich das gleiche mit z.B. <font> mache, ist die Ausgabe von „toHtml()“ jedoch einfach:

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Trebuchet MS'; font-size:8pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Text</p></body></html>
so, als hätte ich <font> überhaupt nicht verwendet, und das, OBWOHL mein <font style="font-size: 30px"> mit eingebautem StyleSheet den Text wie erwartet vergrößert darstellt.

Soll heißen: Bestimmte HTML-Elemente werden verwendet UND bei „toHtml()“ ausgegeben (<a>), andere werden verwendet, ABER NICHT ausgegeben (<font>).

Ein StyleSheet mit einem Style für einen Absatz <p> zu setzen, ändert schlichtweg nichts.

Code: Alles auswählen

self.document().setDefaultStyleSheet(QtCore.QString("p {max-width: 50px;}"))
    self.setDocument(self.document())
Das Gleiche für <body> funktioniert ebenfalls nicht.

Das Gleiche mit

Code: Alles auswählen

self.document().setDefaultStyleSheet(QtCore.QString("font {font-size: 30px;}"))
    self.setDocument(self.document())
funktioniert aber, ich mache also nicht grundsätzlich etwas mit dem Anwenden des StyleSheets falsch.


Wahrscheinlich habe ich es jetzt ein bisschen übertrieben und mein Anliegen wird gar nicht mehr richtig klar, drum noch einmal:
ich möchte nichts anderes, als dass ich kontrollieren kann, wie breit ein QGraphicsTextItem maximal werden kann.

Ich finde wirklich nichts Nützliches im Internet, drum hoffe ich auf eure Hilfe.

Danke
Edgar

Verfasst: 15. Mai 2010 20:13
von upsala
setWidth gibt es nicht. Schon mal setTextWidth probiert?

Verfasst: 15. Mai 2010 20:50
von EdgarButan
Sorry, setTextWidth() meinte ich.