2011-07-22 10 views
1

私はエディタで簡単なテキスト検索を実装しようとしています。この問題まですべてがうまくいっています!ここで後方検索を実装しようとしています。手順は次のとおりです。被写体が後方にあるかどうかを確認し、ビープ音を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のコピーを返します

QTextCursor QPlainTextEdit :: TextCursorの位置()constは
:ドキュメントから

返されたカーソル上の の変更は、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); 
    // (...) 
} 

...私はcursor.isNull()条件が真の間、あなたはmovePosition()関数を呼び出すことがわかります。 これはうまくいかない理由です...

+1

私はあなたの助けに感謝しますが、cursor.isNull()カーソルが文書内の位置を指しているかどうかを返します。これは、カーソルがnullポインタまたは何か(AFAIK)であり、カーソルがここでポインタではないことを意味しません。しかし、これは便利なヒントだと思うので、もう一度文書をチェックします。確かにありがとう。 –

関連する問題