2013-02-14 16 views
5

Sono un programmatore studente che sta attualmente sviluppando un'applicazione per il lavoro che utilizza Qt4. Sto creando un editor di equazioni e sto riscontrando problemi nel tentativo di evidenziare una stringa nel mio campo QTextEdit. Ho una funzione che analizza la stringa QTextEdit e restituisce un intero di inizio e fine di dove si trova un errore. La mia strategia originale consisteva nell'usare tag HTML in questi due punti per evidenziare l'errore. Sfortunatamente sembra esserci un problema con il tag html e la sintassi dell'equazione.Come evidenziare una stringa di testo all'interno di un QTextEdit

Quello che penso di cui ho bisogno è una strategia che si basa sulla libreria di Qt per impostare un colore di sfondo tra questi due indici. Ho iniziato a cercare un QSyntaxHighlighter; tuttavia penso che questo sia più per evidenziare usando una serie predefinita di leggi e non per afferrare semplicemente qualcosa tra uno & b e l'impostazione del colore di sfondo. Se posso usare l'evidenziatore della sintassi, forniscimi un esempio e un riferimento, poiché ho già letto la documentazione e non ho trovato nulla.

Grazie per qualsiasi aiuto in anticipo!

P.S. Giusto per enfatizzare i problemi di compatibilità html; html diventa problematico a causa di più < e segni> utilizzati.

risposta

10

È possibile utilizzare QTextCursor e QTextCharFormat per esso:

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

Questo è quello che alla fine ho finito per girare a .. Il problema di questa risposta è che sembra non riesco a impostare il testo torna al colore predefinito in seguito . Quello che ho finito è di grattare il cambiamento del colore di sfondo e di impostare il mio particolare segmento di equazione incline all'errore per essere semplicemente il testo selezionato fino a quando il mouse non ha fatto clic su una posizione altrimenti. Ovviamente non evidenzio i problemi in rosso, tuttavia questa soluzione ha fatto ciò di cui avevo bisogno; evidenzia il testo di cui avevo bisogno per un controllo più intuitivo delle equazioni. –

+0

Allo stesso modo è possibile impostare il colore di sfondo predefinito. Hai solo bisogno di salvare le posizioni del testo che hai selezionato prima. – hank

+0

Sfortunatamente ciò non è fattibile a causa della dipendenza da un trigger emesso dal campo di modifica del testo. Quando l'utente fa clic di nuovo nella casella, desidero che l'evidenziazione scompaia. Resettando il cursore ogni volta che questo segnale viene emesso, l'utente perde la capacità di fare clic con il pulsante destro del mouse e selezionare il testo. Va bene se non si conosce un modo per quello; Ho appena pensato di chiedere. –

Problemi correlati