2010-09-24 7 views
1

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

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

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

ответ

3

Для вашей проблемы есть один из способов, я вижу, вы можете это исправить, но я не уверен, что это лучший. Вот он:

Вы можете позвонить textCursor() на свой QGraphicsTextItem, чтобы получить QTextCursor вашего QGraphicsTextItem. С помощью этого курсора вы можете иметь свою позицию, вызывая position(). Затем сохраните это значение, обновите текст, а затем установите положение курсора, создав новый QTextCursor, установив свою позицию с помощью setPosition(int pos, MoveMode m = MoveAnchor).

Надеюсь, это поможет.

EDIT добавить пример:

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

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

Смежные вопросы