2011-07-22 30 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),並且遊標不是這裏的指針。但我認爲這是一個有用的提示,我會再次檢查文檔。的確如此。 –