Russian Qt Forum

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



Название: После show() добавление текста в QTextEdit в 100 раз медленнее...
Отправлено: yarick от Январь 27, 2013, 08:24
Мне нужно перестраивать уже показанный на экране QTextEdit - а он перестраивается почему-то в 100 раз медленнее, хотя отключил перерисовку

Код:
#include <QtGui>

void insertTextExample(){
  QTextEdit* pTextEdit1 =  new QTextEdit();
  QTextCursor textCursor = pTextEdit1->textCursor();
  int i;

  pTextEdit1->show();//Если не делать show() - то будет в 100 раз быстрее
  pTextEdit1->setUpdatesEnabled(false);//Отключение перерисовки не помогает!
 
  QTime timeInsertText; timeInsertText.start();
  for(i=0;i<1000;i++){
textCursor.insertText("Text");
  }
  qDebug() << "Time insert small text x1000 = " << timeInsertText.elapsed();//60 mc - если сначала вставить потом сделать show(), 10000 - если обновлять уже существующий
 
  pTextEdit1->clear();
 
 
  QTime timeInsertText2; timeInsertText2.start();
  for(i=0;i<100;i++){
textCursor.insertText("TextTextTextTextTextTextTextTextTextText");
  }
  qDebug() << "Time insert big text x100 = " << timeInsertText2.elapsed();//6 mc - если сначала вставить потом сделать show(), 1000 - если обновлять уже существующий
 
  pTextEdit1->setUpdatesEnabled(true);
}

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

  insertTextExample();

  return app.exec();
}


Название: Re: После show() добавление текста в QTextEdit в 100 раз медленнее...
Отправлено: Bepec от Январь 27, 2013, 11:29
Флудераст детектед. Удалите предыдущую тему, или эту. Не стоит вызывать к себе сразу негативное отношение десятком одинаковых тем.


Название: Re: После show() добавление текста в QTextEdit в 100 раз медленнее...
Отправлено: yarick от Январь 27, 2013, 14:18
Флудераст детектед. Удалите предыдущую тему, или эту. Не стоит вызывать к себе сразу негативное отношение десятком одинаковых тем.
Тут я немного другую проблему поднял. А кнопки "удалить тему" нигде не вижу...


Название: Re: После show() добавление текста в QTextEdit в 100 раз медленнее...
Отправлено: Old от Январь 27, 2013, 14:29
Мне нужно перестраивать уже показанный на экране QTextEdit - а он перестраивается почему-то в 100 раз медленнее, хотя отключил перерисовку
Возможно лучше изменять документ и уже измененный устанавливать в QTextEdit.


Название: Re: После show() добавление текста в QTextEdit в 100 раз медленнее...
Отправлено: Bepec от Январь 27, 2013, 15:12
InsertText может и принудительно вызывать апдейт ) Хотя я незнаю :)

Совет Old'а верен по моему представлению :)


Название: Re: После show() добавление текста в QTextEdit в 100 раз медленнее...
Отправлено: yarick от Январь 27, 2013, 16:10
Спасибо, действительно если сначала создать независимый QTextDocument, заполнить и присвоить QTextEdit - скорость в 8-9 раз быстрее.
Правда вставка небольшой строчки 100 раз занимает 6 мс на вставку в виртуальный документ, и около 24 мс на присвоение его QTextEdit... Но это,  я думаю, приемлимо


Название: Re: После show() добавление текста в QTextEdit в 100 раз медленнее...
Отправлено: LisandreL от Январь 27, 2013, 18:39
Спасибо, действительно если сначала создать независимый QTextDocument, заполнить и присвоить QTextEdit - скорость в 8-9 раз быстрее.
Правда вставка небольшой строчки 100 раз занимает 6 мс на вставку в виртуальный документ, и около 24 мс на присвоение его QTextEdit... Но это,  я думаю, приемлимо
Сравните с вариантом:
Код
C++ (Qt)
textEdit->setUpdatesEnabled(false);
//ваши изменения
textEdit->setUpdatesEnabled(true);