Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: yarick от Январь 26, 2013, 22:09



Название: Ускорение вставки текста в QTextEdit
Отправлено: 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



Название: Re: Ускорение вставки текста в QTextEdit
Отправлено: Bepec от Январь 26, 2013, 22:44
У меня такое чуйство что вы вывод на экран слов в момент инсерта не прекращаете. Соответственно у вас возрастает количество перерисовок прямо пропорционально количеству вызываемых инсертов.

PS могу быть неправ, пишу в состоянии аффекта.