2015-03-27 5 views
0

Как я могу программно редактировать содержимое QPlainTextEdit?Программно редактировать содержимое QPlainTextEdit

Например, мне может потребоваться реализовать «Найти и заменить» или удалить определенную строку текста или вставить какой-либо текст.

тривиальный подход будет перезагружать содержимое полностью:

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

Однако это кажется расточительным, и мы также будем терять форматирование добавляемого через QPlainTextEdit::appendHtml().

Другой подход описан в Removing last line from QTextEdit - они имитируют пользователя, редактирующего текст. Ответ для QTextEdit, но я думаю, что это будет работать на QPlainTextEdit, а также:

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

Какой подход следует использовать для редактирования содержимого? У второго есть какие-то преимущества?

Редактировать: Действительно ли это действительный подход или просто взлом?

+1

Вы в значительной степени ответили на свой вопрос самостоятельно. Как правило, второй подход более гибкий. Чтобы добавить больше к вашему ответу, я бы сказал, что вы можете управлять форматированием, но также и выбором текста. Он также делает любые внутренние обновления, выполняемые 'QPlainTextEdit', на локальном, ограниченном количестве текста, а не на всем содержимом (я бы предположил, но я не знаю, какие внутренние обновления будут такими). – Googie

+0

@Googie Что меня беспокоило, это выглядело как хак. Наверное, я не уверен, что QPlainTextEdit должен был поддерживать программное редактирование вообще. – sashoalm

+2

Не беспокойтесь. Это прекрасный и правильный способ сделать это. – Googie

ответ

1

QPlainTextEdit документация стоит:

Текст может быть вставлен с помощью класса QTextCursor или используя удобные функции insertPlainText(), appendPlainText() или паста().

Так что это правильный способ редактирования с помощью QTextCursor.