我正在尝试在我正在编写的编辑器中实现简单的文本搜索。一切都很好,直到这个问题!我正在尝试在这里实现向后搜索。过程是:向后查找主题,如果未找到,则发出一次蜂鸣声,如果再次按下查找按钮,则转到文档末尾,然后再次进行搜索。 “reachEnd”是一个int,定义为编辑器类的私有成员。这是执行向后搜索的功能。
void TextEditor::findPrevPressed() {
QTextDocument *document = curTextPage()->document();
QTextCursor cursor = curTextPage()->textCursor();
QString find=findInput->text(), replace=replaceInput->text();
if (!cursor.isNull()) {
curTextPage()->setTextCursor(cursor);
reachedEnd = 0;
}
else {
if(!reachedEnd) {
QApplication::beep();
reachedEnd = 1;
}
else {
reachedEnd = 0;
cursor.movePosition(QTextCursor::End);
curTextPage()->setTextCursor(cursor);
findPrevPressed();
}
}
}
问题是光标没有移动到最后!它返回False,这意味着失败。怎么会失败?!!提前谢谢。
答案 0 :(得分:4)
由于这个问题得到了一些看法并且似乎是一个常见的问题,我认为它应该得到一个答案(尽管作者肯定已经弄明白了)。
来自文档:
QTextCursor QPlainTextEdit :: textCursor()const
返回的副本 QTextCursor表示当前可见的光标。 请注意 返回游标上的更改不会影响QPlainTextEdit的游标; 使用setTextCursor()更新可见光标。
所以你得到了它的副本,并且cursor.movePosition(QTextCursor::End);
它不会起作用。
我做的是:
QTextCursor newCursor = new QTextCursor(document);
newCursor.movePosition(QTextCursor::End);
curTextPage()->setTextCursor(newCursor);
答案 1 :(得分:3)
如果我简化你的代码:
if (!cursor.isNull()) {
// (...)
}
else {
// (...)
cursor.movePosition(QTextCursor::End);
// (...)
}
...我看到你在cursor.isNull()条件为true时调用movePosition()函数。 也许这就是它不起作用的原因......