gpt4 book ai didi

c++ - 为什么此代码在找到后不突出显示搜索词?

转载 作者:行者123 更新时间:2023-11-30 03:04:20 24 4
gpt4 key购买 nike

下面的代码在找到搜索词时不会突出显示它。实际上,在按下“下一步”按钮后,光标从 QPlainTextEdit(称为 ui->Editor)中消失。是什么原因造成的?

void TextEditor::findNextInstanceOfSearchTerm()
{
QString searchTerm = this->edtFind->text();

if(this->TextDocument == NULL)
{
this->TextDocument = ui->Editor->document();
}


QTextCursor documentCursor(this->TextDocument);

documentCursor = this->TextDocument->find(searchTerm,documentCursor);

if(!documentCursor.isNull())
{
documentCursor.select(QTextCursor::WordUnderCursor);

}else
{
ui->statusbar->showMessage("\""+searchTerm+"\" could not be found",MESSAGE_DURATION);

}
}

最佳答案

首先,每次您按下下一步按钮时,您的代码都会在文档的开头创建一个新光标,因此您将始终从头开始搜索。其次,您必须了解您操作的光标与您的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
}
}

关于c++ - 为什么此代码在找到后不突出显示搜索词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8698604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com