Hallo!
Ich möchte in meinem Programm ein QTextEdit nutzen, um eine einfache Text-Formatierung (fett, kursiv, unterstrichen) zu ermöglichen.
Allerdings benötige ich , wenn im QTextEdit z.B. Folgendes eingegeben wurde:
------------------------------
Fetter Text
Normaler Text
------------------------------
eine Ausgabe in einem BBCode ähnlichem Format:
------------------------------
[f]Fetter Text[/f]
Normaler Text
------------------------------
Natürlich könnte man diese Tags gleich in plaintext ins QTextEdit schreiben, aber das möchte ich nicht!
Deswegen habe ich es jetzt Folgendes gedacht:
Ein regulärer Ausdruck findet in textEdit->toHtml(); alle Eingaben zwischen den von Qt erzeugten <span style=" font-weight:600;"> </span> (das ist jetzt nur ein Beispiel für fetten Text!).
Danach werden in textEdit->toPlainText(); wiederum per regulärem Ausdruck die vorher gefunden "fetten Textstellen" mit meinen eigenen [f] [/f] umschlossen.
Gibt es vielleicht eine elegantere Lösung für mein Problem?
Danke schon mal,
caligano
WYSIWYG-Editor mit eigenen Tags!?
Re: WYSIWYG-Editor mit eigenen Tags!?
Ein schlechtes Beispiel, wenn Du mich fragst. Ich würde für fetten Text die Bold-Tags nehmen (<b></b>) und das nach textedit->toHtml() einfach durch deine [f][/f] ersetzten, mit einem einfachen replace. Allerdings wirst Du dann auch die Linebreaks ersetzen müssen.caligano hat geschrieben:(das ist jetzt nur ein Beispiel für fetten Text!).
Auf deine Art ginge es auch gar nicht, wenn man das mal nach vollzieht. Angenommen Du hast ein fettes 'das' im HTML-Text. Deine RegExp findet das 'das' und dann ersetzt Du alle 'das' im Plaintext?
Ich habe so ein xhtml editor gemacht mit tabellen bilder href link ecc..
kannst ja mal anschauen ... http://svn.sourceforge.net/viewvc/qtexc ... ditor_cms/
Am ende putze ich alles raus .. so dass ich es mit separatem css formattieren kann.... und libtidy macht den rest....
Und wenn ich nur den reinen text brauche ... um zum beispiel sql suche zu machen ... dann nehme ich mir nur den text ....
Der "div" tag geht bei einem nochmaligen editieren verloren bei qtextedit
ist auch gut .... ich denke diese loesung ist besser als die 3/4 html regeln von qt4 zu umscreiben ... ... QT html is nur ideal um pdf zu machen....
erwischt fast alle html xhtml tag
kannst ja mal anschauen ... http://svn.sourceforge.net/viewvc/qtexc ... ditor_cms/
Am ende putze ich alles raus .. so dass ich es mit separatem css formattieren kann.... und libtidy macht den rest....
Code: Alles auswählen
/* remove all style qt html style and bring to xhtml on tidy */
QString CleanTagQt4( QString body , QString class_name )
{
/*qDebug() << "### start clean tag ";*/
QString finale, finale4;
QString newbody = body;
newbody.replace(QRegExp("<div[^>]*>([^<]*)</div>",Qt::CaseInsensitive), "\\1 <!-- QRegExp -->");
newbody.replace("-qt-paragraph-type","devnull-type");
newbody.replace("margin-top","devnull-top");
newbody.replace("margin-bottom","devnull-bottom");
newbody.replace("margin-left","devnull-left");
newbody.replace("margin-right","devnull-right");
newbody.replace("text-indent","devnull-indent");
newbody.replace("font-size","devnull-size");
newbody.replace("#target=_blank\"","\" target=\"_blank\"");
newbody.replace("#target=_top\"","\" target=\"_top\"");
newbody.replace("#target=_self\"","\" target=\"_self\"");
newbody.replace("#target=_main\"","\" target=\"_main\"");
newbody.replace("#target=_menu\"","\" target=\"_menu\"");
newbody.replace("\n"," ");
QString wbody = newbody.trimmed();
QDateTime dt = QDateTime::currentDateTime();
QDate timecute;
QString day_en = timecute.shortDayName(timecute.day());
QString month_en = timecute.shortMonthName (timecute.month());
QString last = dt.toString("yyyy hh:mm:ss");
QString tname = QString( "%1, %2 %3 %4 +0200" ).arg( day_en , QString::number(timecute.day()), month_en , last );
finale = TidyCleanhtml(QString("<div class=\"####CLASSNAME####\" title=\"Programm powered by PPK-Webprogramm www.ciz.ch document from %2 \">%1</div>").arg(wbody).arg(tname));
finale.replace("\n"," ");
finale.replace("####CLASSNAME####",class_name);
finale4 = finale.trimmed();
return finale4;
}
Und wenn ich nur den reinen text brauche ... um zum beispiel sql suche zu machen ... dann nehme ich mir nur den text ....
Der "div" tag geht bei einem nochmaligen editieren verloren bei qtextedit
ist auch gut .... ich denke diese loesung ist besser als die 3/4 html regeln von qt4 zu umscreiben ... ... QT html is nur ideal um pdf zu machen....
Code: Alles auswählen
/* remove all html tag and return as text */
QString InternalTagClean( QString body )
{
body.replace(" "," ");
body.replace(QRegExp("<script(.)[^>]",Qt::CaseInsensitive), "�###cdatastart###� script-tag-attribute ");
body.replace(QRegExp("<style(.)[^>]",Qt::CaseInsensitive), "�###cdatastart###� style-tag-attribute ");
body.replace("//<![CDATA[","�###cdatastart###� cdata ");
body.replace("//]]>","�###cdataend###�");
body.replace("<!--","�###cdatastart###� comment ");
body.replace("<noscript>","�###cdatastart###� nosript-tag ");
body.replace("</noscript>","�###cdataend###�");
body.replace("<NOSCRIPT>","�###cdatastart###� nosript-tag");
body.replace("</NOSCRIPT>","�###cdataend###�");
body.replace("<SCRIPT>","�###cdatastart###� script-tag");
body.replace("</SCRIPT>","�###cdataend###�");
body.replace("<script>","�###cdatastart###� script-tag");
body.replace("</script>","�###cdataend###�");
body.replace("<style>","�###cdatastart###� style-tag");
body.replace("</style>","�###cdataend###�");
body.replace("<STYLE>","�###cdatastart###� style-tag");
body.replace("</STYLE>","�###cdataend###�");
body.replace("-->","�###cdataend###�");
body.replace("<!---","�###cdatastart###� comment ");
body.replace("--->","�###cdataend###�");
/* body.replace(QRegExp("<p[^>]*>([^<]*)</p>",Qt::CaseInsensitive), "\\1");*/
body.replace("<br>","##break##");
body.replace("</br>","##break##");
body.replace("</p>","##break##");
body.replace("</td>","##break##");
body.remove(QRegExp("<head>(.*)</head>",Qt::CaseInsensitive));
body.remove(QRegExp("�###cdatastart###�(.)[^�]*�###cdataend###�",Qt::CaseInsensitive));
body.remove(QRegExp("<script(.)[^>]*</script>",Qt::CaseInsensitive));
body.remove(QRegExp("�###cdatastart###�(.)[^�]*�###cdataend###�",Qt::CaseInsensitive));
body.remove(QRegExp("<form(.)[^>]*</form>",Qt::CaseInsensitive));
body.remove(QRegExp("<FORM(.)[^>]*</FORM>",Qt::CaseInsensitive));
body.remove(QRegExp("<script(.)[^>]*</script>",Qt::CaseInsensitive));
body.remove(QRegExp("<SCRIPT(.)[^>]*</SCRIPT>",Qt::CaseInsensitive));
body.remove(QRegExp("<style(.)[^>]*</style>",Qt::CaseInsensitive));
body.remove(QRegExp("<STYLE(.)[^>]*</STYLE>",Qt::CaseInsensitive));
body.remove(QRegExp("<(.)[^>]*>"));
return body;
}
.........................
speack português italiano deutsch english castellà qt
speack português italiano deutsch english castellà qt
Re: WYSIWYG-Editor mit eigenen Tags!?
@macman:
Kann ich denn Qt soweit bringen, dass bei toHtml() statt span-Tags die <b> Tags genutzt werden?

@patrik08
Danke, aber ich will eigentlich keine Html-Editor bauen, sondern "nur" ein Texteditor, der gerade mal diese 3 Funktionen kann (fett, kursiv, unterstrichen). Deswegen wäre es glaube ich nicht notwendig, neben Qt noch eine weitere lib (libtidy) zu nutzen...
Das Beispiel <span style=" font-weight:600;"> </span> ist das Resultat, das mir Qt erzeugt hat! Ich habe testweise den Inhalt des QTextEdits als Datei abgespeichert, und dort wurden dann nicht die Standard-HTML-Tags <b></b> genutzt.macman hat geschrieben:Ein schlechtes Beispiel, wenn Du mich fragst. Ich würde für fetten Text die Bold-Tags nehmen (<b></b>)....caligano hat geschrieben:(das ist jetzt nur ein Beispiel für fetten Text!).
Kann ich denn Qt soweit bringen, dass bei toHtml() statt span-Tags die <b> Tags genutzt werden?
Ja da hast du recht, aber ich wollte eben die Zeilenumbrüche umgehenmacman hat geschrieben:Auf deine Art ginge es auch gar nicht, wenn man das mal nach vollzieht.
@patrik08
Danke, aber ich will eigentlich keine Html-Editor bauen, sondern "nur" ein Texteditor, der gerade mal diese 3 Funktionen kann (fett, kursiv, unterstrichen). Deswegen wäre es glaube ich nicht notwendig, neben Qt noch eine weitere lib (libtidy) zu nutzen...
Re: WYSIWYG-Editor mit eigenen Tags!?
Das wird abhängig davon sein, wie Du den Text erstellt hast. Wenn Du selbst die Tags einträgst, sollte es auch fett dargestellt werden und auch so wieder heraus kommen. Wenn Du aber setFontWeight(int) benutzt hast, dann sieht das Ergebnis so aus.caligano hat geschrieben:Das Beispiel <span style=" font-weight:600;"> </span> ist das Resultat, das mir Qt erzeugt hat!