为什么这个代码在找到搜索词后不突出显示?
Why does this code not highlight the search term once found?
下面的代码在找到搜索词时不突出显示搜索词。事实上,按下"下一步"按钮后,光标从QPlainTextEdit(称为ui->编辑器)中消失。是什么引起的?
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
}
}
- 使用
QTextCursor::EndOfWord
- 使用
QPlainTextEdit::setExtraSelections
选择/突出显示qplaintexttedit
只是你已经有了光标可以突出显示单词,但是你没有把它应用到文本编辑
相关文章:
- 如何在文本文件中搜索员工记录(按名称)并仅显示其详细信息?
- 如何使 QSortFilterProxyModel 停止在搜索结果中显示不完整的匹配项
- 是否可以显示需要线性搜索的时间才能找到您在程序中找到的密钥
- 二进制搜索 - 代码编译并运行后不显示输出
- 显示深度优先搜索图遍历C++
- 二进制搜索程序。在应用测试用例时给出正确的输出仍然显示" "超出时间限制" "错误
- 在二进制搜索树中显示到节点的路径
- 二进制搜索树顺序树显示
- 显示属于二叉搜索树深度路径的节点
- 二叉搜索树递归显示节点
- 如何使用信号和插槽从qt表单中获取id,然后在链表中搜索它并使用另一个表单显示结果
- 二进制搜索树显示问题
- 如何在数组中显示二进制搜索树结果
- C++显示include搜索文件的位置
- 为什么这个代码在找到搜索词后不突出显示?
- 如何在程序的内存中搜索图像/png/jpeg/任何其他类型并显示它
- 如何在c++中搜索和显示文本文件
- 如何在控制台中正确显示二进制搜索树
- 如何显示多个向量的搜索结果?c++
- 突出显示与Qt5中的搜索字符串匹配的文本