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

Alles rund um die Programmierung mit Qt
Antworten
EdgarButan
Beiträge: 8
Registriert: 25. März 2010 14:10

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

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

setWidth gibt es nicht. Schon mal setTextWidth probiert?
EdgarButan
Beiträge: 8
Registriert: 25. März 2010 14:10

Beitrag von EdgarButan »

Sorry, setTextWidth() meinte ich.
Antworten