ich bin neu hier im Forum, da ich durch einen Job jetzt erst an die Programmierung mit Qt gekommen bin.
Nun habe ich die Aufgabe einen Editor mit Syntax-Highlighting zu schreiben.
Zum Syntax-Highlighting habe ich QSyntaxHighlighter "gesubclassed"
Nun will ich eine Funktion implementieren, die mir immer, wenn mein Cursor an einer Klammer steht, diese und die evtl. dazugehörende Klammer fett hervorhebt, bis mein Cursor wieder weg ist. Nun habe ich folgendes Problem:
Bisher hebe ich die Klammern so hervor, dass ich den jeweiligen Chars ein bestimmtes QTextCharFormat zuweise. Wenn ich das allerdings mache, dann wird der Syntax-Highlighter wieder aufgerufen. Was natürlich extreme Auswirkungen auf die Performance mit sich zieht.
Nun habe ich mir den Quellcode von QSyntaxHighlighter angeschaut und der Highlighter selbst arbeitet über das QTextLayout-Objekt von dem jeweiligen Text-Block.
Meine Idee ist nun, meine Klammern-Hervorhebung auch über dieses Layout zu realisieren, da dann der Highlighter nicht aufgerufen wird.
Leider finde ich dazu keinerlei brauchbare Beispiele o.ä. und das Ding verhält sich sehr seltsam:
Manchmal wird die Klammer wirklich fett, manchmal verschiebt sich die ganze Zeile, manchmal werden alle Zeichen im Block fett geschrieben. Ich habe bisher noch keine Regel erkennen können, wie das ganze funktioniert.
Ich setze das Format folgendermaßen:
Code: Alles auswählen
QTextCursor cursor( textCursor() );
QTextLayout *layout = cursor.block().layout();
QTextCharFormat bracketFormat;
curFormat.setFontWeight( QFont::Bold );
// position beinhaltet die Position der Klammer
QList<QTextLayout::FormatRange> curList;
QTextLayout::curFormatRange;
curFormatRange.start = position;
curFormatRange.length = 1;
curFormatRange.format = bracketFormat;
curList.append(curFormatRange);
layout->setAdditionalFormats( curList );
Vielleicht hat ja schon jemand von Euch Erfahrungen mit der Klasse QTextLayout und kann mir ein paar Tipps oder Anregungen geben.
Danke im Voraus