12

QTextEditと呼ばれるフォームがありtranslationInputます。ユーザーに編集機能を提供しようとしています。

これQTextEditには、HTML形式のテキストが含まれます。「太字」、「斜体」などのボタンのセットがあり、対応するタグをドキュメントに追加する必要があります。テキストが選択されていないときにボタンが押された場合、たとえば、タグのペアを挿入したいだけです<b></b>。一部のテキストを選択した場合、タグを左右に表示したいと思います。

これは正常に機能します。ただし、カーソルを終了タグの前に配置したいので、ユーザーはカーソルを手動で再配置しなくても、新しく追加されたタグ内に入力し続けることができます。デフォルトでは、カーソルは新しく追加されたテキストの直後に表示されます(したがって、私の場合は、終了タグの直後に表示されます)

イタリックボタン用のコードは次のとおりです。

//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です。

4

1 に答える 1

15

ドキュメントを深く掘り下げることで問題を解決しました。

このtextCursor()関数は、からカーソルのコピーQTextEditを返します。したがって、実際のものを変更するには、setTextCursor()関数を使用する必要があります。

QTextCursor tmpCursor = ui.translationInput->textCursor();
tmpCursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
ui.translationInput->setTextCursor(tmpCursor);
于 2012-07-27T07:47:28.220 に答える