だから私はこれを私が作成している私のカスタムQTテキストエディタで置換ループを見つけさせます。私はこれから始めました。
while(ui->textEdit->find(findString, QTextDocument::FindFlag()))
{
ui->textEdit->find(findString, QTextDocument::FindFlag());
ui->textEdit->textCursor().insertText(replaceString);
}
これは機能しましたが、「findString」の一致が連続している場合、何らかの理由で機能しなかったようです。たとえば、「findString」が「=」で、ドキュメントに「==」が含まれている場合、このループは「=」の一方のみを置き換え、両方は置き換えません。これを解決するには、ループの最後または最初でカーソル位置をQTextEditの最初に変更するのが良い解決策だと思いました。だから私はこれを試しました。
while(ui->textEdit->find(findString, QTextDocument::FindFlag()))
{
//ui->textEdit->textCursor().movePosition(QTextCursor().Start, QTextCursor().MoveAnchor);
ui->textEdit->find(findString, QTextDocument::FindFlag());
ui->textEdit->textCursor().insertText(replaceString);
ui->textEdit->cursor().setPos(0,0);
}
ループの最初のコメントアウト行とループの下部の行で、両方がカーソル位置を移動しようとしました。どちらも何らかの理由で機能していないようです。ただし、どちらの行も問題なくコンパイルされます。テストとして、ループの実行後にカーソルをドキュメントの先頭に移動するために、ループの外側に両方の行がありますが、これらの行のいずれかがカーソルをまったく移動していないようです。私のカーソルは常に「findString」の最後のインスタンスにあります。
どちらの方法もわかりません...
1.カーソルを移動する必要がないようにループを修正します。
または
2.ループの最後または最初のQTextEditの先頭にカーソルを移動します。
私の質問に対してあなたが持っているかもしれない洞察を前もってありがとう。
この方法でループを修正するだけです。
while(ui->textEdit->find(findString))
{
ui->textEdit->textCursor().insertText(replaceString);
}
最初のコードスニペットでは、find
テキストを置き換える前に2回呼び出しているため、最初の一致は常にスキップされます(置き換えられることはありません)。
「すべて置換」ソリューションを開発している場合は、ループの前の最初にカーソルを移動することをお勧めします。
ui->textEdit->moveCursor(QTextCursor::Start);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加