Ребята,не возникала ли ни у кого подобная задача? Я пишу текстовый редактор с возможностью подсветки синтаксиса для некоторого языка программирования. Использую пример из Qt. Переделала его под свою задачу, текст подсвечивается. Для подсветки наследуюсь от класса QSyntaxHighlighter, переопределяю метод virtual void highlightBlock(const QString &text); в котором собственно и запрограммирована вся подсветка.
Но вот с подсветкой парных скобок возникла проблема... Дело в том что сам методт virtual void highlightBlock(const QString &text); получает только текущий блок! И подсветка выполняется ровно в одной строке, с горем пополам... При повторном нажитии мышкой возле скобки подсветка уже не выполняется,видимо он уже обработал весь блок. Вообще получается что он один раз скобку выделил и потом если я не удалю парную скобку подсветка не исчезнет! Т.е. он не реагирует на положение курсора в строке....!
Чем можно отлавливать положение курсора???
Как мне получить все предыдущие блоки?? Вообще весь текст? Или как из предыдущих блоков вызволять строчки чтобы в цикле их проверять??
Я попробовала метод previousBlockState(); но он всё время мне возращает -1.
Может кто знает что делать?
??
Привиду код,который написала для подсветки в текущей строке:
int count =0;
scope_right = -1;
for (int i = 0; i < text.length(); ++i) {
if (text.mid(i,1)=="}"){
count = 0;
int j=i-1;
while (j>0){
if (text.mid(j,1)=="}") count++;
else
if (text.mid(j,1)=="{" && count==0){
setFormat(j,1,Qt::red);
scope_right=j; break;
}
else
if(text.mid(j,1)=="{" && count>0) count--;
j--;
}
}
}
for (int i = 0; i < text.length(); ++i){
if (text.mid(i,1)!="{" || text.mid(i,1)!="}")
setFormat(scope_right,1,Qt::black);
}