1

と一緒に仕事をしてきましたQGraphicsTextItem。現在、シーンにレイアウトされており、それぞれがテキストの物理ページを表しています。現在keyReleaseEvent、入力されたテキストをすべてのページに再配布する関数をオーバーライドしています。これの問題は、 でテキストを設定すると、カーソルがシーンのフォーカス項目として設定されているsetPlainTextの先頭に戻ることです。textitem

ご想像のとおり、これは、特にフォーカスが設定されているページではなく別のページで入力するときに問題になります。また、切り取りとコピーのキーボード ショートカットがまったく機能しなくなります。

QGraphicsTextItemカーソルをリセットしたりカーソルを移動したりせずに a のテキストを設定する方法はありますか?

4

1 に答える 1

3

あなたの問題については、あなたがそれを修正できると私が思う一つの方法がありますが、それが最良の方法であるかどうかはわかりません。ここにあります:

あなたはあなたのを取得するためtextCursor()にあなたを呼び出すことができます。このカーソルを使用して、を呼び出すことでその位置を知ることができます。次に、この値を保持し、テキストを更新してから、新しいを作成してカーソルの位置を設定し、カーソルの位置を。で設定します。QGraphicsTextItemQTextCursorQGraphicsTextItemposition()QTextCursorsetPosition(int pos, MoveMode m = MoveAnchor)

これがお役に立てば幸いです。

例を追加するために編集:

// graphicsTextItem is of type QGraphicsTextItem*

QTextCursor cursor = graphicsTextItem->textCursor;
int startPosition = cursor.position();

// Do all you need to update your text.

QTextCursor afterCursor;
afterCursor.setPosition(startPosition);

graphicsTextItem->setTextCursor(afterCursor);

私はこれをテストしていません、私はそれがうまくいくと思った方法でそれを書きました。

于 2010-09-24T18:55:17.923 に答える