Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Январь 09, 2016, 00:02



Название: QTextEdit: Как заполучить "универсальное" событие вставки символа?
Отправлено: xintrea от Январь 09, 2016, 00:02
В свете нуливого количества ответов в теме QTextEdit: Как «отцепиться» от ссылки? (http://www.prog.org.ru/topic_29683_0.html), заменяю задачу.

Мне нужно отловить событие вставки символа в текст в объекте, унаследованном от QTextEdit.

Проблема осложняется тем, что символы могут вставляться, как минимум, тремя путями:

- Нажатием клавиши на клавиатуре;
- Вставкой из буфера обмена;
- Drag-and-drop текста.

Возможно, что еще есть методика вставки символа, пока припомнил только три. Ну еще плюсом идет удаление символа или выделения, тогда под курсором начинает находиться другой символ.

Из-за этого, тупое переопределение keyPressEvent() - этого явно недостаточно. Неужели надо лепить развесистые ловители событий и сигналов только для того, чтобы получить событие вставки символа?


Название: Re: QTextEdit: Как заполучить "универсальное" событие вставки символа?
Отправлено: Bepec от Январь 09, 2016, 02:12
ну лезть в исходники textEdit и там ставить фильтры.
Или же отловить все события и фильтровать в installEventFilter.
Ну в любом случае вам или надо все события отлавливать, или же ставить фильтр на textEdit.


Название: Re: QTextEdit: Как заполучить "универсальное" событие вставки символа?
Отправлено: Igors от Январь 09, 2016, 13:20
Какие проблемы (или чем не устраивает) сигнал textChanged ?


Название: Re: QTextEdit: Как заполучить "универсальное" событие вставки символа?
Отправлено: xintrea от Январь 09, 2016, 14:54
Какие проблемы (или чем не устраивает) сигнал textChanged ?

При разборе полетов выяснилось несколько направлений. Что-то не могу определиться, что будет правильнее именно для данной задачи:

textChanged::QtextEdit
cursorPositionChanged::QtextEdit
contentsChange::QTextDocument


Название: Re: QTextEdit: Как заполучить "универсальное" событие вставки символа?
Отправлено: Igors от Январь 09, 2016, 15:18
Что-то не могу определиться, что будет правильнее именно для данной задачи:
Смотря чего Вы хотите добиться. Если по-прежнему "отвязаться от ссылки" (в общем случае "формата"), то при получении textChanged у Вас все нужные данные на руках


Название: Re: QTextEdit: Как заполучить "универсальное" событие вставки символа?
Отправлено: panAlexey от Январь 10, 2016, 07:53
Это ты MyTetra дорабатываешь?
Багтрек есть?


Название: Re: QTextEdit: Как заполучить "универсальное" событие вставки символа?
Отправлено: Dimka Novikov от Январь 20, 2016, 10:30
Посмотрите вот сюда, как мне кажется, то что нужно для вашей ситуации

Код:
void QTextDocument::contentsChange(int position, int charsRemoved, int charsAdded) [signal]

This signal is emitted whenever the document's content changes; for example, when text is inserted or deleted, or when formatting is applied.

Information is provided about the position of the character in the document where the change occurred, the number of characters removed (charsRemoved), and the number of characters added (charsAdded).

The signal is emitted before the document's layout manager is notified about the change. This hook allows you to implement syntax highlighting for the document.