2013-02-14 13 views
5

Ich bin ein Student Programmierer entwickelt derzeit eine Anwendung für die Arbeit mit Qt4. Ich baue einen Gleichungseditor und habe Probleme, eine Zeichenfolge innerhalb meines QTextEdit Feldes hervorzuheben. Ich habe eine Funktion, die die QTextEdit-Zeichenfolge analysiert und gibt eine Anfangs- und eine End-Ganzzahl an, wo ein Fehler gefunden wird. Meine ursprüngliche Strategie bestand darin, an diesen beiden Punkten HTML-Tags zu verwenden, um den Fehler hervorzuheben. Unglücklicherweise scheint es ein Problem mit dem HTML-Tagging und der Gleichungssyntax zu geben.So markieren Sie eine Textfolge in einem QTextEdit

Was ich glaube ich brauche, ist eine Strategie, die auf Qt-Bibliothek beruht, um eine Hintergrundfarbe zwischen diesen beiden Indizes zu setzen. Ich fing an, einen QSyntaxHighlighter zu suchen; aber ich denke, dass dies mehr für die Hervorhebung mit einem vordefinierten Satz von Gesetzen und nicht nur für das Ergreifen von irgendetwas zwischen einem & b und das Setzen der Hintergrundfarbe ist. Wenn ich Syntax Highlighter verwenden kann, bitte geben Sie mir ein Beispiel oder einen Verweis, da ich die Dokumentation bereits durchgelesen habe und nichts gefunden habe.

Vielen Dank für jede Hilfe im Voraus!

P.S. Nur um die HTML-Kompatibilitätsprobleme zu betonen; html wird aufgrund mehrerer < und> Zeichen problematisch.

Antwort

10

Sie können QTextCursor und QTextCharFormat dafür verwenden:

QTextEdit *edit = new QTextEdit; 
... 
int begin = ... 
int end = ... 
... 

QTextCharFormat fmt; 
fmt.setBackground(Qt::yellow); 

QTextCursor cursor(edit->document()); 
cursor.setPosition(begin, QTextCursor::MoveAnchor); 
cursor.setPosition(end, QTextCursor::KeepAnchor); 
cursor.setCharFormat(fmt); 
+0

Das ist, was ich schließlich drehen landete .. Das Problem mit dieser Antwort ist, dass es scheint, ich den Text nicht zurück auf die Standardfarbe festlegen kann danach . Was ich am Ende getan habe, ist die Hintergrundfarbe zu verkratzen und mein spezielles Segment der fehleranfälligen Gleichung so einzustellen, dass es einfach der ausgewählte Text ist, bis die Maus auf einen anderen Ort geklickt hat. Ich stelle Probleme in Rot offensichtlich nicht klar, jedoch hat diese Lösung getan, was ich brauchte; Markieren Sie den Text, den ich für eine intuitivere Methode der Gleichungsüberprüfung benötigte. –

+0

Auf die gleiche Weise können Sie die Standardhintergrundfarbe einstellen. Sie müssen nur die Textpositionen speichern, die Sie zuvor ausgewählt haben. – hank

+0

Leider ist das nicht möglich, da man sich auf einen Auslöser verlässt, der vom Textbearbeitungsfeld ausgegeben wird. Sobald der Benutzer zurück in die Box klickt, möchte ich, dass die Hervorhebung verschwindet. Wird der Cursor jedes Mal zurückgesetzt, wenn dieses Signal ausgegeben wird, verliert der Benutzer die Fähigkeit, mit der rechten Maustaste zu klicken und Text auszuwählen. Es ist in Ordnung, wenn Sie keinen Weg dafür wissen; Ich dachte nur, ich würde fragen. –

Verwandte Themen