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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: После show() добавление текста в QTextEdit в 100 раз медленнее...  (Прочитано 4057 раз)
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();
}
Записан
Bepec
Гость
« Ответ #1 : Январь 27, 2013, 11:29 »

Флудераст детектед. Удалите предыдущую тему, или эту. Не стоит вызывать к себе сразу негативное отношение десятком одинаковых тем.
Записан
yarick
Гость
« Ответ #2 : Январь 27, 2013, 14:18 »

Флудераст детектед. Удалите предыдущую тему, или эту. Не стоит вызывать к себе сразу негативное отношение десятком одинаковых тем.
Тут я немного другую проблему поднял. А кнопки "удалить тему" нигде не вижу...
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Январь 27, 2013, 14:29 »

Мне нужно перестраивать уже показанный на экране QTextEdit - а он перестраивается почему-то в 100 раз медленнее, хотя отключил перерисовку
Возможно лучше изменять документ и уже измененный устанавливать в QTextEdit.
Записан
Bepec
Гость
« Ответ #4 : Январь 27, 2013, 15:12 »

InsertText может и принудительно вызывать апдейт ) Хотя я незнаю Улыбающийся

Совет Old'а верен по моему представлению Улыбающийся
Записан
yarick
Гость
« Ответ #5 : Январь 27, 2013, 16:10 »

Спасибо, действительно если сначала создать независимый QTextDocument, заполнить и присвоить QTextEdit - скорость в 8-9 раз быстрее.
Правда вставка небольшой строчки 100 раз занимает 6 мс на вставку в виртуальный документ, и около 24 мс на присвоение его QTextEdit... Но это,  я думаю, приемлимо
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #6 : Январь 27, 2013, 18:39 »

Спасибо, действительно если сначала создать независимый QTextDocument, заполнить и присвоить QTextEdit - скорость в 8-9 раз быстрее.
Правда вставка небольшой строчки 100 раз занимает 6 мс на вставку в виртуальный документ, и около 24 мс на присвоение его QTextEdit... Но это,  я думаю, приемлимо
Сравните с вариантом:
Код
C++ (Qt)
textEdit->setUpdatesEnabled(false);
//ваши изменения
textEdit->setUpdatesEnabled(true);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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