Название: Подсветка парных скобок под курсором Отправлено: virtual_root от Декабрь 21, 2010, 14:00 Ребята,не возникала ли ни у кого подобная задача? Я пишу текстовый редактор с возможностью подсветки синтаксиса для некоторого языка программирования. Использую пример из Qt. Переделала его под свою задачу, текст подсвечивается. Для подсветки наследуюсь от класса QSyntaxHighlighter, переопределяю метод virtual void highlightBlock(const QString &text); в котором собственно и запрограммирована вся подсветка.
Но вот с подсветкой парных скобок возникла проблема... Дело в том что сам методт virtual void highlightBlock(const QString &text); получает только текущий блок! И подсветка выполняется ровно в одной строке, с горем пополам... При повторном нажитии мышкой возле скобки подсветка уже не выполняется,видимо он уже обработал весь блок. Вообще получается что он один раз скобку выделил и потом если я не удалю парную скобку подсветка не исчезнет! Т.е. он не реагирует на положение курсора в строке....! Чем можно отлавливать положение курсора??? Как мне получить все предыдущие блоки?? Вообще весь текст? Или как из предыдущих блоков вызволять строчки чтобы в цикле их проверять?? Я попробовала метод previousBlockState(); но он всё время мне возращает -1. Может кто знает что делать?????? Привиду код,который написала для подсветки в текущей строке: Код: int count =0; Название: Re: Подсветка парных скобок под курсором Отправлено: Пантер от Декабрь 21, 2010, 14:35 Покопайся в исходниках QtCreator, там это точно есть.
Название: Re: Подсветка парных скобок под курсором Отправлено: DmP от Декабрь 21, 2010, 15:11 Я попробовала метод previousBlockState(); но он всё время мне возращает -1. Может кто знает что делать?????? previousBlockState нужно самому задавать, по результату highlightBlock(), тогда в следующем вызове будет результат предыдущего вызова. Название: Re: Подсветка парных скобок под курсором Отправлено: DmP от Декабрь 21, 2010, 17:07 Но вот с подсветкой парных скобок возникла проблема... Дело в том что сам методт virtual void highlightBlock(const QString &text); получает только текущий блок! И подсветка выполняется ровно в одной строке, с горем пополам... При повторном нажитии мышкой возле скобки подсветка уже не выполняется,видимо он уже обработал весь блок. Вообще получается что он один раз скобку выделил и потом если я не удалю парную скобку подсветка не исчезнет! Т.е. он не реагирует на положение курсора в строке....! См. сигнал QTextDocument::cursorPositionChanged() и слот QSyntaxHighlighter::rehighlightBlock().Чем можно отлавливать положение курсора??? Название: Re: Подсветка парных скобок под курсором Отправлено: virtual_root от Декабрь 21, 2010, 20:13 спасибо всем ответившим,сейчас попробую ваши советы.
|