Как я могу программно редактировать содержимое 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);
Какой подход следует использовать для редактирования содержимого? У второго есть какие-то преимущества?
Редактировать: Действительно ли это действительный подход или просто взлом?
Вы в значительной степени ответили на свой вопрос самостоятельно. Как правило, второй подход более гибкий. Чтобы добавить больше к вашему ответу, я бы сказал, что вы можете управлять форматированием, но также и выбором текста. Он также делает любые внутренние обновления, выполняемые 'QPlainTextEdit', на локальном, ограниченном количестве текста, а не на всем содержимом (я бы предположил, но я не знаю, какие внутренние обновления будут такими). – Googie
@Googie Что меня беспокоило, это выглядело как хак. Наверное, я не уверен, что QPlainTextEdit должен был поддерживать программное редактирование вообще. – sashoalm
Не беспокойтесь. Это прекрасный и правильный способ сделать это. – Googie