尝试在自定义 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);
所以我在我正在创建的自定义 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);