2012-07-27 10 views
8

Ho una forma con una QTextEdit su di esso, che si chiama translationInput. Sto cercando di fornire la funzionalità di modifica per l'utente.Spostando il cursore all'interno di QTextEdit

Questo QTextEdit conterrà testo in formato HTML. Ho un set di pulsanti, come "grassetto", "Corsivo" e così via, che dovrebbe aggiungere i tag corrispondenti nel documento. Se il pulsante viene premuto quando non è selezionato alcun testo, voglio solo inserire una coppia di tag, ad esempio <b></b>. Se è selezionato un testo, voglio che i tag appaiano a destra ea sinistra.

Questo funziona correttamente. Tuttavia, desidero anche posizionare il cursore prima del tag di chiusura, in modo che l'utente possa continuare a digitare all'interno del tag nuovo aggiunto senza dover riposizionare il cursore manualmente. Per impostazione predefinita, il cursore appare a destra dopo il il testo appena aggiunto (quindi nel mio caso, subito dopo il tag di chiusura).

Ecco il codice che ho per il pulsante Corsivo:

//getting the selected text(if any), and adding tags. 
QString newText = ui.translationInput->textCursor().selectedText().prepend("<i>").append("</i>"); 
//Inserting the new-formed text into the edit 
ui.translationInput->insertPlainText(newText); 
//Returning focus to the edit 
ui.translationInput->setFocus(); 
//!!! Here I want to move the cursor 4 characters left to place it before the </i> tag. 
ui.translationInput->textCursor().movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4); 

Tuttavia, l'ultima linea non fa nulla, il cursore non si muove, anche se i rendimenti movePosition()true, che significa che tutte le operazioni sono state completate con successo.

Ho anche provato a farlo con QTextCursor::PreviousCharacter anziché QTextCursor::Left e ho provato a spostarlo prima e dopo aver riportato lo stato attivo alla modifica, che non modifica nulla.

Quindi la domanda è: come faccio a spostare il cursore all'interno del mio QTextEdit?

risposta

9

Risolto il problema scavando più a fondo nei documenti.

La funzione textCursor() restituisce un copia del cursore da QTextEdit. Quindi, per modificare quello attuale, setTextCursor() funzione deve essere utilizzato:

QTextCursor tmpCursor = ui.translationInput->textCursor(); 
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4); 
ui.translationInput->setTextCursor(tmpCursor); 
+10

È possibile spostare direttamente il cursore del testo utilizzando 'MoveCursor()': ' ui.translationInput-> MoveCursor (QTextCursor :: sinistra, QTextCursor :: MoveAnchor, 4); ' – iliis

+0

Penso che il commento sopra dovrebbe essere trasformato in una risposta. –

Problemi correlati