2015-03-27 2 views
0

Comment puis-je modifier par programme le contenu d'un QPlainTextEdit? Par exemple, je pourrais vouloir implémenter un "Rechercher et remplacer", ou supprimer une ligne de texte particulière, ou insérer du texte.Modifier par programme le contenu d'un QPlainTextEdit

L'approche trivial serait de recharger le contenu entièrement:

QString text = ui->plainTextEdit->toPlainText(); 
... // Now edit text. 
ui->plainTextEdit->setPlainText(text); 

Cependant, cela semble inutile, et nous allons aussi perdre le formatage ajouté via QPlainTextEdit::appendHtml().

Une autre approche est décrite dans Removing last line from QTextEdit - ils simulent l'utilisateur éditant le texte. La réponse est pour QTextEdit, mais je pense que cela fonctionnerait pour QPlainTextEdit, ainsi:

ui->textEdit_2->setFocus(); 
QTextCursor storeCursorPos = ui->textEdit_2->textCursor(); 
ui->textEdit_2->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); 
ui->textEdit_2->moveCursor(QTextCursor::StartOfLine, QTextCursor::MoveAnchor); 
ui->textEdit_2->moveCursor(QTextCursor::End, QTextCursor::KeepAnchor); 
ui->textEdit_2->textCursor().removeSelectedText(); 
ui->textEdit_2->textCursor().deletePreviousChar(); 
ui->textEdit_2->setTextCursor(storeCursorPos); 

Quelle approche dois-je utiliser pour modifier le contenu? Est-ce que le second a des avantages?

Éditer: Est-ce même une approche valide, ou juste un hack?

+1

Vous avez à peu près répondu à votre question par vous-même. Généralement, la deuxième approche est plus flexible. Pour ajouter plus à votre réponse, je dirais que vous pouvez contrôler le formatage, mais aussi une sélection de texte. Il effectue également toutes les mises à jour internes effectuées par 'QPlainTextEdit' sur une quantité limitée de texte local, et non sur l'ensemble du contenu (j'imagine, mais je ne sais pas quelles mises à jour internes seraient celles-ci). – Googie

+0

@Googie Ce qui m'inquiète, c'est que ça ressemble à un hack. Je suppose que je ne suis pas sûr si QPlainTextEdit était supposé supporter l'édition programmatique du tout. – sashoalm

+2

Ne vous inquiétez pas. C'est parfaitement bien et correctement. – Googie

Répondre

1

documentation QPlainTextEdit signifie:

Le texte peut être inséré à l'aide de la classe QTextCursor ou en utilisant les fonctions de confort insertPlainText(), appendPlainText() ou de pâte().

Il s'agit donc d'un moyen correct d'éditer avec QTextCursor.