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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QTableWidget (->setItem()) работает очень медленно  (Прочитано 15348 раз)
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #15 : Май 08, 2013, 15:24 »

Если не знаете ответа на поставленный мною вопрос, пожалуйста, покиньте эту ветку.
Как-то грубо... Причём RedDog абсолютно прав.
Я уверен, что никто тебе здесь не поможет, ибо проблема в Qt.
Тем более, что QTableWidget изначально рассчитан на работу с небольшим объёмом данных.

Кстати, попробуй перед clear() выключить обработку сигналов самого виджета и его модели:
Код
C++ (Qt)
tw->model()->blockSignals( true );
tw->blockSignals( true );
tw->clear();
tw->blockSignals( false );
tw->model()->blockSignals( false );
 

clear() работает быстро. Сотые доли секунды. Стоит ли блокировать сигналы перед вызовом clear() и восстанавливать их после вызова clear()?
Тормозит setItem(), так что если блокировать сигналы, то, наверное, перед вызовом этого метода?

Что касается "долгого удаления", это лишь смутная догадка (притом моя же собственная). Таблица создается быстро в первый раз, ДО ее визуализации, а в следующие разы окно нарисовано и она видна; товарищу с западного форума помог метод hide(), что противоречит догадке о задержках из-за сборщика мусора. Так как пример из мануала работает плохо, нужен ответ того, кто не ограничился чтением мануала, бился лично и решил эту проблему. Или бился, но не решил, зато выяснил, лично, почему оно так работает. Сделать таблицу на модели я могу, но придется существенно менять код. Время терпит. Спасибо за ответ, посмотрим, что скажут другие.
Записан

Эвтаназия - наше хобби!
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #16 : Май 08, 2013, 15:28 »

1) отключить напрочь обновление.
2) отключить сортировку.
3) провести операции по изменению-вставке.
4) включить отключенное в первых двух пунктах.
5) посмотреть на результат.

Если речь о setUpdatesEnabled() и setSortingEnabled(), то все равно медленно. Возможно, какой-то прирост есть, но на глаз не заметен.
Записан

Эвтаназия - наше хобби!
Bepec
Гость
« Ответ #17 : Май 08, 2013, 15:29 »

Выложите проект и я его вам поколупаю. В сотни раз быстрее, чем в телепатов играть Показает язык
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #18 : Май 08, 2013, 15:45 »

Выложите проект и я его вам поколупаю. В сотни раз быстрее, чем в телепатов играть Показает язык

Поздно! Проблема только что решилась. Улыбающийся
Отдельное спасибо GreatSnake за то, что навел на мысль об использовании blockSignals(). После взятия ими в клещи группы setItem() скорость загрузки данных достигла космических высот. 1300 строк грузятся за 0,14 секунды! То есть втрое быстрее, чем была скорость на старте. 500 строк грузятся в таблицу за 63 миллисекунды.
Так что у Qt все в порядке - информации, увы, недостаточно. Всем спасибо за помощь.
Записан

Эвтаназия - наше хобби!
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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