Russian Qt Forum

Qt => Общие вопросы => Тема начата: G-virus от Май 21, 2012, 13:45



Название: QTextEdit. textChanged(). Как запретить изменение текста
Отправлено: G-virus от Май 21, 2012, 13:45
Всем привет. Помогите решить такую проблемку. Есть textEdit, в нем текст разноцветный (подсветка синтаксиса). Пользователь может редактировать его, как хочет. Но. В тексте присутствуют блоки (/* и */), это не комментарий Си, а спец-блоки, т.к. код паскалевский. Эти блоки пользователю нельзя изменять. Как можно запретить изменение текста в таких блоках? Для упрощения они выделены цветом Qt::Cyan.

Спасибо


Название: Re: QTextEdit. textChanged(). Как запретить изменение текста
Отправлено: Bepec от Май 21, 2012, 15:19
Как вариант при очередном изменении возвращать в прежнее состояние. Но понято и ежу, что это грубый подход.


Название: Re: QTextEdit. textChanged(). Как запретить изменение текста
Отправлено: G-virus от Май 21, 2012, 17:45
Не, это-то понятно, что нужно возвращать прежнее состояние. Больше интересует, можно ли понять, какой символ удалился и его цвет?


Название: Re: QTextEdit. textChanged(). Как запретить изменение текста
Отправлено: Bepec от Май 21, 2012, 19:36
Можно как вариант Undo творить, если блок задет.

А вот как узнать что удалено - хм. Незнаю. Как вариант можно просто перехватывать нажатия и зырить что нажато в каком участке текста.

Конечно это будет не блеск, но как реальный метод(топорный с приложением напильника) пойдёт.


Название: Re: QTextEdit. textChanged(). Как запретить изменение текста
Отправлено: G-virus от Май 21, 2012, 20:14
Да, пожалуй, так и попробую. В принципе, желательно конечно не успеть что-то удалить, а просто проверить, пытается пользователь удалить /* или */


Название: Re: QTextEdit. textChanged(). Как запретить изменение текста
Отправлено: Bepec от Май 22, 2012, 07:12
Ну так оно и будет. Ты перехватываешь евент => решаешь что делать => пропускаешь если корректно => всё удаляется. Или не удаляется, если не пропустишь ;)