首先链接槽函数,在QLineEdit修改文本时发出信号,进行查找;
如果已经匹配一次之后再修改文本进行匹配,例如我们需要匹配“MMS”这个字段,进行的操作就是连续输入’M’‘M’'S’3个字符,但是在输入第二个字符时,如果我们不提前移动光标,就会导致第二次匹配跳过当前匹配的这一个单词。
所以我们需要在调用find函数时,提前移动光标至当前被匹配的字符串前面,这样才能保证下一次匹配会先匹配这一串字符串。
这里可以使用QTextBrowser::moveCursor或者QTextCursor::movePosition两个接口,但是QTextBrowser::moveCursor没有往左移动N个字符的功能,所以使用QTextCursor::movePosition;
需要额外注意的时,修改QTextCursor之后,记得使用QTextBrowser::setTextCursor,不然操作时不会生效的!!!
代码如下:
connect(ui.ldFind, &QLineEdit::textChanged, this, [this](const QString& text) {
QTextCursor textCursor = ui.textBrowser->textCursor();
//文本修改的时候,需要把光标移动至当前选中文本的前面
textCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, textCursor.selectedText().size());
ui.textBrowser->setTextCursor(textCursor);//记得调用这个函数,否则修改不会生效!
//ui->tbXMLShow->moveCursor(QTextCursor::StartOfWord);//不一定是一个单词
ui.textBrowser->find(ui.ldFind->text());
});