Обновление QGraphicsTextItem при изменении текста - PullRequest
1 голос
/ 24 сентября 2010

Я работал с QGraphicsTextItem.В настоящее время я выложил сцену, каждая из которых изображает физическую страницу текста.Сейчас я переопределяю функцию keyReleaseEvent, чтобы перераспределить текст, набранный по всем страницам.Проблема заключается в том, что когда я устанавливаю текст с помощью setPlainText, курсор возвращается к началу textitem, который установлен в качестве элемента фокусировки для сцены.

Как вы можете себе представить,это проблематично при наборе текста, особенно на другой странице, а не на той, на которой установлена ​​фокусировка, а также не работает комбинация клавиш для вырезания и копирования.

Есть ли способ задать текст QGraphicsTextItem без этого сбросить курсор / переместить курсор?

1 Ответ

3 голосов
/ 24 сентября 2010

Что касается вашей проблемы, я вижу, что вы могли бы ее исправить, но я не уверен, что она лучшая. Вот оно:

Вы можете позвонить textCursor() на свой QGraphicsTextItem, чтобы получить QTextCursor своего QGraphicsTextItem. С помощью этого курсора вы можете получить его позицию, вызвав position(). Затем сохраните это значение, обновите текст и затем установите положение курсора, создав новый QTextCursor, установив его положение с помощью setPosition(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);

Я не проверял это, я написал так, как я думал, что это сработает.

...