6

我正在尝试在我正在编写的编辑器中实现一个简单的文本搜索。一切都很好,直到出现这个问题!我正在尝试在这里实现向后搜索。过程是:向后查找主题,如果没有找到,哔一声,如果再次按下查找按钮,则转到文档末尾,重新搜索。"reachedEnd" 是一个 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,这意味着失败。这怎么可能失败?!!提前致谢。

4

2 回答 2

8

由于这个问题得到了一些看法,而且它似乎是一个普遍的问题,我认为它值得一个答案(尽管作者最肯定地想通了)。

从文档中:

QTextCursor QPlainTextEdit::textCursor() const
返回代表当前可见光标的 QTextCursor 的副本。请注意,返回光标的更改不会影响 QPlainTextEdit 的光标;使用 setTextCursor() 更新可见光标。

所以你得到了它的副本,但这样做cursor.movePosition(QTextCursor::End);是行不通的。

我所做的是:

QTextCursor newCursor = new QTextCursor(document);
newCursor.movePosition(QTextCursor::End);
curTextPage()->setTextCursor(newCursor);
于 2016-06-01T18:28:08.607 回答
3

如果我像这样简化您的代码:

if (!cursor.isNull()) {
   // (...)
}
else {
    // (...)
    cursor.movePosition(QTextCursor::End);
    // (...)
}

...我看到您在 cursor.isNull() 条件为真时调用了 movePosition() 函数。也许这就是它不起作用的原因......

于 2011-07-22T15:47:42.273 回答