2011-07-22 32 views
1

我试图在编辑器中编写一个简单的文本搜索。一切都很好,直到这个问题!我正在尝试在这里实施向后搜索。过程是:向后查找主题,如果没有找到,则发出一声蜂鸣,如果再次按下查找按钮,则转到文档末尾,然后再次搜索。 “reachedEnd”是一个int,定义为编辑器类的私有成员。这是执行反向搜索的功能。移动QTextCursor到结尾的问题

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,这意味着失败。这怎么会失败?提前致谢。

回答

3

由于这个问题有一些意见,它似乎是一个共同的问题,我认为它应该得到答案(即使作者最肯定地指出了) 。

从文档:

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

所以,你得到了它的副本,并通过做cursor.movePosition(QTextCursor::End);它不会工作。

我所做的是:
QTextCursor newCursor = new QTextCursor(document);
newCursor.movePosition(QTextCursor::End);
curTextPage()->setTextCursor(newCursor);

3

如果我简化代码:

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

...我看到您致电movePosition()函数,而cursor.isNull()条件为真。 也许这就是它不起作用的原因...

+1

我感谢您的帮助,但cursor.isNull()返回光标是否指向文档中的位置。这并不意味着游标是空指针或某物(AFAIK),并且游标不是这里的指针。但我认为这是一个有用的提示,我会再次检查文档。的确如此。 –