2012-01-02 6 views
1

以下のコードでは、検索用語が見つかった時点でそのキーワードを強調表示していません。実際には、「次へ」ボタンを押した後、QPlainTextEdit(ui-> Editorと呼ばれる)からカーソルが消えます。それは何の原因ですか?このコードで検索用語が見つかったのはなぜですか?

void TextEditor::findNextInstanceOfSearchTerm() 
{ 
    QString searchTerm = this->edtFind->text(); 

    if(this->TextDocument == NULL) 
    { 
     this->TextDocument = ui->Editor->document(); 
    } 


    QTextCursor documentCursor(this->TextDocument); 

    documentCursor = this->TextDocument->find(searchTerm,documentCursor); 

    if(!documentCursor.isNull()) 
    { 
     documentCursor.select(QTextCursor::WordUnderCursor); 

    }else 
    { 
     ui->statusbar->showMessage("\""+searchTerm+"\" could not be found",MESSAGE_DURATION); 

    } 
} 

答えて

2

まず、次のボタンを押すたびに文書の先頭に新しいカーソルが作成されるので、常に検索します最初から。第2に、あなたが操作するカーソルは、あなたのQPlainTextEditのものとは何の関係もないことを理解しなければなりません:あなたはコピーを操作します。テキスト編集に影響を与えたい場合は、setTextCursorを使用してそのカーソルを変更する必要があります。

void TextEditor::findNextInstanceOfSearchTerm() 
{ 
    QString searchTerm = this->edtFind->text(); 

    if(this->TextDocument == NULL) 
    { 
     this->TextDocument = ui->Editor->document(); 
    } 

    // get the current cursor 
    QTextCursor documentCursor = ui->Editor->textCursor(); 

    documentCursor = this->TextDocument->find(searchTerm,documentCursor); 

    if(!documentCursor.isNull()) 
    { 
     // needed only if you want the entire word to be selected 
     documentCursor.select(QTextCursor::WordUnderCursor); 

     // modify the text edit cursor 
     ui->Editor->setTextCursor(documentCursor); 
    } 
    else 
    { 
     ui->statusbar->showMessage(
      "\""+searchTerm+"\" could not be found",MESSAGE_DURATION); 
    } 
} 

側の注意点として、あなたは、QPlainTextEditfind方法を提供することを知っているしたい場合がありますので、これはあなたが望むものを達成するための簡単な方法かもしれません:ここでは実用的なソリューションです

void TextEditor::findNextInstanceOfSearchTerm() 
{ 
    QString searchTerm = this->edtFind->text(); 

    bool found = ui->Editor->find(searchTerm); 

    if (found) 
    { 
     QTextCursor cursor = ui->Editor->textCursor(); 
     cursor.select(QTextCursor::WordUnderCursor); 
     ui->Editor->setTextCursor(cursor); 
    } 
    else 
    { 
     // set message in status bar 
    } 
} 
1
  1. 使用QTextCursor::EndOfWord
  2. 使用QPlainTextEdit::setExtraSelectionsハイライト/ QPlainTextEdit

で何かを選択するだけで、あなたはすでに単語をハイライト表示しますカーソルを持っていますが、テキスト編集

にそれを適用していません
関連する問題