Во-первых, ваш код создает новый курсор в начале документа каждый раз, когда вы нажимаете следующую кнопку, поэтому вы всегда будете искать с начала.Во-вторых, вы должны понимать, что курсор, которым вы манипулируете, не имеет ничего общего с курсором в вашем QPlainTextEdit
: вы манипулируете копией.Если вы хотите повлиять на редактирование текста, вы должны изменить его курсор, используя setTextCursor
.Вот рабочее решение:
void TextEditor::findNextInstanceOfSearchTerm()
{
QString searchTerm = this->edtFind->text();
if(this->TextDocument == NULL)
{
this->TextDocument = ui->Editor->document();
}
// get the current cursor
QTextCursor documentCursor = ui->Editor->textCursor();
documentCursor = this->TextDocument->find(searchTerm,documentCursor);
if(!documentCursor.isNull())
{
// needed only if you want the entire word to be selected
documentCursor.select(QTextCursor::WordUnderCursor);
// modify the text edit cursor
ui->Editor->setTextCursor(documentCursor);
}
else
{
ui->statusbar->showMessage(
"\""+searchTerm+"\" could not be found",MESSAGE_DURATION);
}
}
В качестве примечания вы можете узнать, что QPlainTextEdit
предоставляет метод find
, так что это может быть более простой способдостичь того, что вы хотите:
void TextEditor::findNextInstanceOfSearchTerm()
{
QString searchTerm = this->edtFind->text();
bool found = ui->Editor->find(searchTerm);
if (found)
{
QTextCursor cursor = ui->Editor->textCursor();
cursor.select(QTextCursor::WordUnderCursor);
ui->Editor->setTextCursor(cursor);
}
else
{
// set message in status bar
}
}