質問

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);
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top