Seite 1 von 1

HTML im QGraphicsTextItem

Verfasst: 10. Oktober 2010 00:26
von anno1988
Hallo,

ich habe da gerade ein kleines Verständnisproblem mit HTML und dem Cursor vom QGraphicsTextItem.

Code: Alles auswählen


QGraphicsTextItem *item;

item = new QGraphicsTextItem();
item->setHTML("<div align=\"center\"><font color=\"#0000FF\">test</font><font color=\"#FF0000\">hallo</font></div>
Angenommen ich habe diese beiden Wörter im QGraphicsTextItem und habe z.B. einen Teil von jedem markiert (html_text2.png). Wie bekomme ich dann zurück was ich markiert habe?

Ich denke als HTML bekomme ich den markierten text ja nicht zurück, da es nur die Methode toHTML() gibt und diese ja den gesamten text als HTML ausgibt.

Verfasst: 10. Oktober 2010 08:55
von upsala
Du hast deinen Text mit einem Cursor marktiert. Da lassen sich jetzt bestimmt Methoden dazu finden.

Verfasst: 10. Oktober 2010 19:40
von anno1988
ok, ich habe das HTML mal aus dem QGraphicstextItem herausbekommen.

Jetzt wollte ich die einzelnen paragraph tags aus dem HTML herausfiltern und in einer Liste speichern. Doch ich bekomme da nur eine leere Zeichenkette zurück. weiß jemand was an dem regex pattern da nicht stimmt?

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" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><!--StartFragment--><span style=" font-family:'Arial'; font-size:20pt; color:#0000ff;">st</span><span style=" font-family:'Arial Black'; font-size:10pt; color:#00ff00;">ha</span><!--EndFragment--></p></body></html>
Code (die "html" variable soll der HTML Code sein der oben drüber steht):

Code: Alles auswählen

QRegExp reg;
QStringList lst;

reg.setPattern("<p\b[^>]*>(.*?)</p>");
reg.indexIn(html);

lst = reg.capturedTexts();


Verfasst: 10. Oktober 2010 20:54
von dazedly
Qt Du musst noch das gewünschte Pattern an QT übergeben. Ich habe gerade keine Ahnung, welches Pattern default ist.

enum PatternSyntax { RegExp, RegExp2, Wildcard, WildcardUnix, FixedString, W3CXmlSchema11 }

http://doc.trolltech.com/4.7/qregexp.html

Verfasst: 10. Oktober 2010 21:06
von anno1988
das hat da leider auch nichts geholfen.

Verfasst: 10. Oktober 2010 21:09
von dazedly
Sicher, dass deine Syntax stimmt? Ich hab die eben mal in meinem Kate getestet und habe damit auch nichts gefunden ;)

Verfasst: 10. Oktober 2010 21:25
von anno1988
ja, da bin ich sicher dass die nicht stimmt. ich habe es vorhin zwar mit einem programm getestet und auch was gefunden, nur in qt jetzt nicht.

zwar kann qregexp kein multiline, doch wenn ich zuvor alle new line zeichen in leerzeichen umwandle, bekomme ich auch kein ergebnis.

Verfasst: 11. Oktober 2010 09:57
von padreigh
zum Testen der RegExps ist das RegExp example ganz nett ... ich denke das du nichts capture'st hängt mit der Greediness der Expressions zusammen. Ich verweise mal auf das "More..." bei QRegExp :) da steht was dazu ... und die DefaultRegExp ist Versionsabhängig ... ich glaube RegExp2 seit 4.7 ... steht aber auch dort.

Verfasst: 11. Oktober 2010 16:11
von anno1988
geht es in dem QRegexp eigentlich nicht mehrere p-Tags auf einmal zu suchen bzw. in eine Liste zu schreiben und jeden p-Tag einzeln in ein Listenelement zu packen?

In meinem Beispiel hier war jetzt nur einen p-Tag verwendet. In dem nächsten gibt es mehrere.

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" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><!--StartFragment--><span style=" font-family:'Arial'; font-size:20pt; color:#0000ff;">test</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial'; font-size:20pt; color:#0000ff;">asd</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial'; font-size:20pt; color:#0000ff;">asd</span><!--EndFragment--></p></body></html>

heraus bekomme ich dann folgendes:

pattern:

Code: Alles auswählen


<p.*><!--StartFragment-->(.*)<!--EndFragment--></p>

Code: Alles auswählen


<span style=" font-family:'Arial'; font-size:20pt; color:#0000ff;">test</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial'; font-size:20pt; color:#0000ff;">asd</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial'; font-size:20pt; color:#0000ff;">asd</span>
Allerdings passt das nh nicht so ganz.