Seite 1 von 1

Im QTextBrowser Bilder beim Kopieren durch Strings ersetzen

Verfasst: 13. Dezember 2006 15:55
von revelation
Hallo zusammen,

ich habe ein Problem und suche mich schon seit Tagen tot:
In einem QTextBrowser befindet sich eine Chat-Log mit Text und Bildern gemischt (für die Smileys). Das Problem ist nun, dass man den nicht ohne weiteres kopieren kann. Wenn ich ihn wieder in einen QTextBrowser einfüge, der RichText erlaubt, klappt alles bestens. Möchte ich ihn aber in einen mit PlainText oder ein anderes Programm einfügen, werden die Smileys durch nicht darstellbare Sonderzeichen ersetzt.
Mein Ziel wäre es, dass ich nur reinen Text kopiere und beim Einfügen die Smileys durch die entsprechenden Codes ersetzt werden. Leider habe ich absolut keine Ahnung, wie das gehen könnte...

Vielen Dank für eure Hilfe! :)

Gruß
Johannes

Verfasst: 13. Dezember 2006 16:01
von upsala
Du könntest hier mal versuchen anzusetzen:

Code: Alles auswählen

QMimeData * QTextEdit::createMimeDataFromSelection() const
. Diese Methode überschreiben, vom QTextEdit QMimeData abfragen und eine neue anhand eines Filters erstellen...

Verfasst: 13. Dezember 2006 18:51
von revelation
upsala hat geschrieben:Diese Methode überschreiben, vom QTextEdit QMimeData abfragen und eine neue anhand eines Filters erstellen...
Das mit dem Überschreiben ist wohl genau das, was ich gesucht hab. Vielen Dank.
Allerdings weiß ich nicht, was du mit "Filter" meinst... Grad schlag ich mich mit QTextCursor rum. ;)

Gruß
Johannes

Verfasst: 13. Dezember 2006 19:34
von upsala
Ja, ich seh gerade, daß es nichts bringt die Orginaldaten zu filtern.

Verfasst: 14. Dezember 2006 22:02
von revelation
Könnte mir jemand sagen, wo ich ansetzen kann? Ich trete leider auf der Stelle... :(

Verfasst: 14. Dezember 2006 23:19
von upsala
QMimeData * QTextEdit::createMimeDataFromSelection() const
QTextCursor QTextEdit::textCursor () const
int QTextCursor::selectionEnd () const
int QTextCursor::selectionStart () const
QTextBlock QTextDocument::findBlock ( int pos ) const

Pseudocode:

QString text;
QTextBlock block=findBlock(selectionStart());
while (block.position()<selectionEnd()) {
if (block.charFormat().isImageFormat()) {
QTextImageFormat imgFormat=block.charFormat();
if (imgFormat.name()==":/smilie1") {
text+=":)";
}
if (imgFormat.name()==":/smilie2") {
text+=":(";
}
usw...
} else {
text+=block.text();
}

block=block.next();
}