2013-02-14 25 views
5

Jestem programistą studiującym obecnie pracującym nad aplikacją do pracy przy użyciu Qt4. Buduję edytor równań i mam problemy z podświetleniem ciągu znaków w moim polu QTextEdit. Mam funkcję, która analizuje łańcuch QTextEdit i zwraca początkową i końcową liczbę całkowitą miejsca, w którym znajduje się błąd. Moją pierwotną strategią było użycie znaczników HTML w tych dwóch punktach, aby podkreślić błąd. Niestety pojawia się problem z tagowaniem html i składnią równania.Jak podświetlić ciąg tekstu wewnątrz QTextEdit

Myślę, że potrzebuję strategii opartej na bibliotece Qt, aby ustawić kolor tła pomiędzy tymi dwoma indeksami. Zacząłem szukać QSyntaxHighlighter; jednak myślę, że jest to bardziej do podkreślania przy użyciu predefiniowanego zestawu praw, a nie do chwytania czegokolwiek pomiędzy & b a ustawianiem koloru tła. Jeśli mogę użyć znacznika składni, proszę podać mi przykład i referencje, ponieważ przeczytałem już dokumentację i niczego nie znalazłem.

Dzięki za pomoc z góry!

P.S. Aby podkreślić problemy ze zgodnością html; html staje się problematyczny ze względu na wiele użytych znaków < i>.

Odpowiedz

10

Można użyć QTextCursor i QTextCharFormat do niego:

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

To, co ostatecznie skończyło się zwracając się do .. Problem z tą odpowiedzią jest to, że wydaje się, że nie można ustawić tekst z powrotem do domyślnego koloru potem . To co zrobiłem to drapanie zmiany koloru tła i ustawienie mojego konkretnego segmentu podatnego na błędy równania, aby był po prostu zaznaczonym tekstem do momentu kliknięcia myszą w inne miejsce. Nie zaznaczam oczywiście problemów na czerwono, jednak to rozwiązanie zrobiło to, czego potrzebowałem; podświetl tekst, którego potrzebowałem do bardziej intuicyjnego sposobu sprawdzania równań. –

+0

W ten sam sposób można ustawić domyślny kolor tła. Musisz tylko zapisać pozycje tekstu, które wybrałeś wcześniej. – hank

+0

Niestety nie jest to możliwe ze względu na użycie wyzwalacza emitowanego z pola edycji tekstu. Gdy użytkownik kliknie z powrotem w okienko, chciałbym, aby podświetlenie zniknęło. Resetowanie kursora za każdym razem, gdy emitowany jest ten sygnał, powoduje, że użytkownik traci możliwość klikania prawym przyciskiem myszy i wybierania tekstu. Jest ok, jeśli nie wiesz, jak to zrobić; Po prostu pomyślałem, że zapytam. –