将QTextCursor移动到最后的问题

时间:2011-07-22 06:58:52

标签: qt4 qtextdocument

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

2 个答案:

答案 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()函数。 也许这就是它不起作用的原因......