尝试在自定义 QT 创建器文本编辑器中创建查找和替换循环.我似乎无法设置光标位置

Trying to create a Find and replace loop in custom QT creator text editor. I seem to be unable to set the cursor position

本文关键字:创建 循环 替换 置光标 位置 查找 QT 自定义 文本 编辑器 文本编辑      更新时间:2023-10-16

所以我在我正在创建的自定义 QT 文本编辑器中找到了一个替换循环。我从这个开始。

while(ui->textEdit->find(findString, QTextDocument::FindFlag()))
{
ui->textEdit->find(findString, QTextDocument::FindFlag());
ui->textEdit->textCursor().insertText(replaceString);
}

这有效,但由于某种原因,如果"findString"的匹配是连续的,它似乎不起作用。例如,如果我的"findString"是"=",而文档中有一个"==",则此循环将仅替换其中一个"=",而不是两个。为了解决这个问题,我认为一个好的解决方案是将光标位置更改为循环末尾或开头的 QTextEdit 开头。所以我试过这个。

while(ui->textEdit->find(findString, QTextDocument::FindFlag()))
{
//ui->textEdit->textCursor().movePosition(QTextCursor().Start, QTextCursor().MoveAnchor);
ui->textEdit->find(findString, QTextDocument::FindFlag());
ui->textEdit->textCursor().insertText(replaceString);
ui->textEdit->cursor().setPos(0,0);
}

开头注释掉的行和循环底部的行,两者都试图移动光标位置。出于某种原因,两者似乎都不起作用。不过,这两行都可以很好地编译。作为测试,我在循环运行后将光标移动到文档开头的循环外的两行,但似乎这些行中的任何一行都没有移动光标。我的光标总是在"findString"的最后一个实例上。

我也不知道该怎么做...

1.修复我的循环,这样我就不需要移动光标了。

2.在循环的末尾或开头成功地将光标移动到 QTextEdit 的开头。

提前感谢您对我的问题的任何见解。

只需以这种方式修复循环:

while(ui->textEdit->find(findString))
{
ui->textEdit->textCursor().insertText(replaceString);
}

在您的第一个代码截图中,您在替换文本之前调用find两次,因此将始终跳过(永远不会替换)第一个匹配项。

如果您正在开发"全部替换"解决方案,则可能需要在循环的开头移动光标:

ui->textEdit->moveCursor(QTextCursor::Start);