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

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 文本编辑器中找到了一个替换循环。我从这个开始。

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.Fix我的循环所以我不需要移动光标。

2.Succesfully 在循环结束或开始时将光标移动到 QTextEdit 的开头。

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

只需这样修复循环:

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

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

如果您正在开发 "replace all" 解决方案,您可能希望将光标移动到循环之前的开头:

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