Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Андрей80 от Май 03, 2010, 02:13



Название: Как обновить текст после добавления новых правил для QSyntaxHighlighter?
Отправлено: Андрей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)  занимает довольно много времени, может быть можно как-то еще решить проблему?


Название: Re: Как обновить текст после добавления новых правил для QSyntaxHighlighter?
Отправлено: Mikhail от Май 03, 2010, 07:38
void QSyntaxHighlighter::rehighlight ()   [slot]

void QSyntaxHighlighter::rehighlightBlock(const QTextBlock &block)