尝试在自定义 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 文本编辑器中找到了一个替换循环。我从这个开始。
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);
相关文章:
- 使用std::list创建循环链表
- 如何创建循环来遍历数组
- 如何将 A 实现到 B 中,将 B 实现到 A 中(不创建循环)?
- 如何创建循环数组
- 有没有办法在 c++ 中创建循环数组
- 通过创建循环简化一些重复操作的代码
- 如何为创建循环创建新样式
- 尝试使用结构在C++中创建循环缓冲区
- 创建循环功能以计算成本
- 如何在C++中使用 STL 列表创建循环
- 为无效字符创建循环
- 在链表创建循环中插入
- C++:创建循环条件的 int 数组时出现问题
- boost图形从txt文件创建循环中的图形
- 如何在omnet++中创建循环
- c++为不符合条件的数据输入创建循环
- 如何在c++中使用int值创建循环(简单)
- 路径查找算法创建循环
- 需要帮助创建循环
- 如何在php中创建循环模板