PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QTextEdit - Attribute einzelner Zeichen ändern ?



micha
05-05-2002, 22:12
Moin,

Ich muss die Attribute ( Farbe, Schriftart ) einzelner Zeichen in einem Text, der durch eine QTextEdit-Klasse dargestellt wird, ändern. Wenn der Text markiert ist ( setSelection(...) ) stellt das ja kein Problem dar. Allerdings scheint es mir nicht wirklich sinnvoll zu sein, zuerst die betreffende Stelle zu markieren, ändern, und dann die Markierung wieder zu entfernen, vor allem, wenn der Benutzer davon nichts mitbekommen soll - ich also zuerst update deaktivieren muss.
Da ja alles so wunderbar abgekapselt ist, scheint mir die einzige Möglichkeit über textCursor() zu sein, mit dessen Hilfe man zumindest mal einen Pointer auf den Paragraphen bekommt.
Dummerweise sind die ganzen Klassen nicht-öffentlichen und undokumentierten ( liegen unter private/qrichtext_p.h ), was die ganze Sache ziemlich erschwert.
Unvollständige Dokumentationen zu den einzelnen Klassen, durch die ich mich gerade versuche durchzulesen, sind hier:

http://www.koffice.org/developer/lib/kotext/Qt3__QTextCursor.html
http://www.koffice.org/developer/lib/kotext/Qt3__QTextParag.html
http://www.koffice.org/developer/lib/kotext/Qt3__QTextFormat.html
http://www.koffice.org/developer/lib/kotext/Qt3__QTextDocument.html

Aber irgendwie steig ich gerade noch nicht ganz dahinter, vielleicht kann mir ja einer auf die Sprünge helfen ;)

Gruß micha

anda_skoa
06-05-2002, 07:26
Hmm, ich hab noch nicht mit QTextEdit gearbeitet, aber so auf den ersten Blick:

Hilft dir QTextEdit::getCursorPosition(Int*, int*) ?

Ciao,
_

micha
06-05-2002, 21:15
Hi,

nein, leider nicht, da ich damit nur den aktuellen Paragraphen und Index bekomme, damit aber nichts verändern kann.

http://doc.trolltech.com/3.0/qtextedit.html#getFormat

Diese Funktion wäre ideal, wenn sie setFormat anstatt getFormat heißen würde ;)



Internally QTextEdit works on paragraphs and characters. A paragraph is a formatted string which is word-wrapped to fit into the width of the widget. A document consists of zero or more paragraphs, indexed from 0. Characters are indexed on a per-paragraph basis, also indexed from 0. The words in the paragraph are aligned in accordance with the paragraph's alignment(). Paragraphs are separated by hard line breaks. Each character within a paragraph has its own attributes, for example, font and color.


Das Problem ist das internally - na, muss mir mal den Quellcode zu Gemüte führen.
Falls Du noch eine Idee hast ;)

Gruß micha

TheDodger
07-05-2002, 12:43
Wie sieht's denn beim Source zu Kate aus?
Da wird doch syntax-hightlight genutzt .... vielleicht hilft dir das weiter?

micha
12-05-2002, 20:12
Hi,

ja, leider ist das ne eigene Implementiernung, basiert nicht auf QTextEdit.
Ich bin nun soweit gekommen, dass ich die einzelnen Zeichen bekomme, aber so richtig funktionieren wills nicht. Hier mal n kleiner Codeschnippsel:



void LessonView::loadLesson( const QString& text )
{
setTextFormat( Qt::PlainText );
setText(text);

QFont f = this->font();
f.setPixelSize( height() / 4 );

qDebug( "Char 1: %c", document()->paragAt(0)->at(0)->c.latin1() );

QTextFormat *format = document()->paragAt(0)->at(0)->format();
format->setColor( QColor( "red" ) );
format->setFont(f);
}


Das Zeichen wird über qDebug richtig ausgegeben, ich müsste also an der richtigen Stelle sein ;)
Wenn ich aber jetzt die Farbe ändere, tut sich gar nichts ( wenn ich statt PlainText RichText verwende, ändert sich zwar die Farbe, aber im ganzen Text ). Bei der Schrift widerum ändert sich der komplette Text und nicht nur der eine Buchstabe ( das Gleiche bei RichText ).
So langsam gehn mir die Ideen aus !? ( Hülfe ;) )

Gruß micha