QtextEditの内側のカーソルを移動します
-
12-12-2019 - |
質問
QTextEdit
と呼ばれるtranslationInput
を持つフォームがあります。ユーザーの編集機能を提供しようとしています。
このQTextEdit
にはHTML形式のテキストが含まれます。 "太字"、 " italic "などのボタンのセットがあります。これは、対応するタグをドキュメントに追加する必要があります。テキストが選択されていないときにボタンを押すと、<b></b>
などのタグのペアを挿入したいだけです。いくつかのテキストが選択されている場合は、タグが左右に表示されます。
はうまく機能します。ただし、カーソルを閉じるの前にカーソルを配置することをお勧めします。そのため、ユーザーはカーソルを手動で再配置することなく、新しい追加タグ内の入力を続けることができます。デフォルトでは、カーソルはの後に右に表示され、新しい追加テキスト(私の場合は閉じるタグの直後に)。
italic ボタンのためのコード:
.
//getting the selected text(if any), and adding tags.
QString newText = ui.translationInput->textCursor().selectedText().prepend("<i>").append("</i>");
//Inserting the new-formed text into the edit
ui.translationInput->insertPlainText( newText );
//Returning focus to the edit
ui.translationInput->setFocus();
//!!! Here I want to move the cursor 4 characters left to place it before the </i> tag.
ui.translationInput->textCursor().movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
しかし、最後の行は何もしません.movePosition()
がtrue
を返しても、カーソルは移動しません。つまり、すべての操作が正常に完了したことを意味します。
QTextCursor::PreviousCharacter
の代わりにQTextCursor::Left
でもこれを試み、それを編集に焦点を合わせる前後に動かしてみました。
だから問題は、QTextEdit
の中にカーソルを動かすにはどうすればいいですか?
解決
は、DOCSをより深く掘り下げることによって問題を解決しました。
textCursor()
関数は、QTextEdit
からカーソルの copy を返します。そのため、実際のものを変更するには、setTextCursor()
関数を使用する必要があります。
.QTextCursor tmpCursor = ui.translationInput->textCursor();
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
ui.translationInput->setTextCursor(tmpCursor);