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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ускорение вставки текста в QTextEdit  (Прочитано 2395 раз)
yarick
Гость
« : Январь 26, 2013, 22:09 »

Я пишу что-то типа продвинутого текстового редактора, мне нужно выделять некоторые слова и предложения особым цветом.
Программа хранит слова как отдельные объекты, а потом из них генерирует текст, однако затраты на вызов textCursor.insertText для каждого слова очень накладны для процессора, по непонятной причине. Написал пример, на котором очевидно, что вызов insertText 1000 раз с маленьким текстом будет в 10 раз дольше, чем вызов его же 100 раз с текстом, в 10 раз большим. Хотя итог одинаковый...

Код:
void insertTextExample(){
  QTextEdit* pTextEdit1 =  new QTextEdit();
  QTextCursor textCursor = pTextEdit1->textCursor();
  int i;
 
  QTime timeInsertText; timeInsertText.start();
  for(i=0;i<1000;i++){
textCursor.insertText("Text");
  }
  qDebug() << "Time insert small text x1000 = " << timeInsertText.elapsed();
 
  pTextEdit1->clear();
 
  QTime timeInsertText2; timeInsertText2.start();
  for(i=0;i<100;i++){
textCursor.insertText("TextTextTextTextTextTextTextTextTextText");
  }
  qDebug() << "Time insert big text x100 = " << timeInsertText2.elapsed();
 
  pTextEdit1->show();
}

int main(int argc, char* argv[]){
  QApplication app(argc, argv);

  insertTextExample();

  return app.exec();
}
Вывод-
Time insert small text x1000 =  60
Time insert big text x100 =  6

Записан
Bepec
Гость
« Ответ #1 : Январь 26, 2013, 22:44 »

У меня такое чуйство что вы вывод на экран слов в момент инсерта не прекращаете. Соответственно у вас возрастает количество перерисовок прямо пропорционально количеству вызываемых инсертов.

PS могу быть неправ, пишу в состоянии аффекта.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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