Question

J'ai un formulaire avec un QTextEdit dessus, qui s'appelle translationInput.J'essaie de fournir la fonctionnalité d'édition à l'utilisateur.

Ce QTextEdit contiendra du texte au format HTML.J'ai un ensemble de boutons, comme "audacieux", "Italique", et ainsi de suite, qui devraient ajouter les balises correspondantes dans le document.Si le bouton est enfoncé alors qu'aucun texte n'est sélectionné, je souhaite simplement insérer une paire de balises, par exemple : <b></b>.Si du texte est sélectionné, je souhaite que les balises apparaissent à gauche et à droite.

Cela fonctionne bien.Cependant, je veux aussi que le curseur soit placé avant la balise de fermeture après cela, l'utilisateur pourra continuer à taper dans la balise nouvellement ajoutée sans avoir besoin de repositionner le curseur manuellement.Par défaut, le curseur apparaît à droite après le texte nouvellement ajouté (donc dans mon cas, juste après la balise de fermeture).

Voici le code que j'ai pour le Italique bouton:

//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);

Par contre, la dernière ligne ne fait rien, le curseur ne bouge pas, même si le movePosition() Retour true, ce qui signifie que toutes les opérations ont été réalisées avec succès.

J'ai aussi essayé de faire ça avec QTextCursor::PreviousCharacter au lieu de QTextCursor::Left, et j'ai essayé de le déplacer avant et après avoir remis le focus sur l'édition, cela ne change rien.

La question est donc de savoir comment déplacer le curseur à l'intérieur de mon QTextEdit?

Était-ce utile?

La solution

Résolu le problème en approfondissant la documentation.

Le textCursor() la fonction renvoie un copie du curseur depuis le QTextEdit.Donc, pour modifier l'actuel, setTextCursor() la fonction doit être utilisée :

QTextCursor tmpCursor = ui.translationInput->textCursor();
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
ui.translationInput->setTextCursor(tmpCursor);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top