Russian Qt Forum
Октябрь 01, 2024, 10:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как обновить текст после добавления новых правил для QSyntaxHighlighter?  (Прочитано 2037 раз)
Андрей80
Гость
« : Май 03, 2010, 02:13 »

Здравствуйте.
Пишу редактор кода с подсветкой синтаксиса, за основу взял стандартный пример QT4 из demos.
Все хорошо, но хочется добавить подсветку пользовательских классов (видел такое например в FlashDevelop).
Сейчас сделал вот так:
Код:
//...........
QStringList ids;
//добавил классы приложения в базу
for (int i = 0; i < classes.size(); i++)
    {
        QString cid = file.addClassInDb(classes[i]);
        ids << cid;
    }
    lib.qMessageBox("", "before addClass");
    editor->highlighter->addClasses(ids); //добавил новые правила для SyntaxHighlighter
                            //ОДНАКО ЧТОБЫ НОВЫЕ СЛОВА ПОДСВЕТИЛИСЬ НАДО ОБНОВИТЬ ТЕКСТ
                            //В TextEdit
    lib.qMessageBox("", "post addClass");
    QTextCursor cursor = editor->textCursor(); //получил позицию курсора
    int cpos = cursor.position();
   //Все бы ничего, но между вот этим сообщением
    lib.qMessageBox("", "before setText");
    editor->setPlainText(c);
  //и вот этим
    lib.qMessageBox("", "after setText");
//проходит около 2 секунд
    cursor.setPosition(cpos);
    editor->setTextCursor(cursor);
То есть после добавления правил подсветки синтаксиса, чтобы слова реально подсветились, я обновляю текст в QTextEdit. Если я этого не делаю слова подсвечиваются только после того как пользователь установит курсор на окончание требуемого слова и введет что нибудь, пробел например или интер. Однако выполнение editor->setPlainText(content)  занимает довольно много времени, может быть можно как-то еще решить проблему?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Май 03, 2010, 07:38 »

void QSyntaxHighlighter::rehighlight ()   [slot]

void QSyntaxHighlighter::rehighlightBlock(const QTextBlock &block)

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.065 секунд. Запросов: 23.