HTML im QGraphicsTextItem

Alles rund um die Programmierung mit Qt
Antworten
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

HTML im QGraphicsTextItem

Beitrag 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.
Dateianhänge
html_text.png
html_text.png (1.11 KiB) 4655 mal betrachtet
html_text2.png
html_text2.png (1.64 KiB) 4655 mal betrachtet
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du hast deinen Text mit einem Cursor marktiert. Da lassen sich jetzt bestimmt Methoden dazu finden.
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag 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();

dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Beitrag 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
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag von anno1988 »

das hat da leider auch nichts geholfen.
dazedly
Beiträge: 197
Registriert: 3. Oktober 2010 15:38
Kontaktdaten:

Beitrag von dazedly »

Sicher, dass deine Syntax stimmt? Ich hab die eben mal in meinem Kate getestet und habe damit auch nichts gefunden ;)
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag 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.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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.
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag 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.
Antworten