Обновление QGraphicsTextItem при изменении текста

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

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

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

1 ответ

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

Ты можешь позвонить 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);

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

Другие вопросы по тегам