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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Быстрая загрузка в виджет.  (Прочитано 5170 раз)
Kalombo
Гость
« : Май 20, 2008, 07:50 »

Мне нужно загрузить в какой-нибудь виджет (вообще, без разницы какой, я пробовал QListView и QListWidget) около 20 тысяч строк. Если никаких мер не предпринимать, то программ висит секунд 20 во воремя добавления этих строк. Пробовал вставить QApplication::processEvents(), время добавления увеличилось в разы(2 минуты ждал). Пробовал создать отдельным потоком, как-то странно получилось, приложение все равно начинало виснуть при добавлении. В идеале хочется, конечно, быстрого добавления слов, но если уж не получится, то скажите как оставить пользователю реакцию на сообщения, но только во время этих же 20 секунд, а не как у меня получилось больше 2х минут.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Май 20, 2008, 08:45 »

может, когда ты используешь QApplication::processEvents() имеет смысл вставку гигантскую обрамить с помощью setUpdatesEnabled(false); и setUpdatesEnabled(true); ?
Записан

Юра.
BRE
Гость
« Ответ #2 : Май 20, 2008, 09:03 »

Для таких случаев, сам Бог велел, использовать модели.  Подмигивающий
Записан
ритт
Гость
« Ответ #3 : Май 20, 2008, 10:39 »

листвиджет заменить на листвью со своей моделью
в моделях ещё есть такая ерундовина "фетчМоре" (или как-то так)
плюс отдельный поток можно заставить эту модель заливать...а вьюху обновлять "пачками"

зы. будет интересно послушать как решил проблему (когда/если решишь)
Записан
sikuda
Гость
« Ответ #4 : Май 29, 2008, 15:45 »

Если у тебя есть для этотго виджета обработка сигналов - их надо на время заполнения списка отрубить.
Типа так:

disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(updateCatalogItem(QTreeWidgetItem *, int)));
createItems(idroot, this, NULL);
connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(updateCatalogItem(QTreeWidgetItem *, int)));

Qt 4.3.4

Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Май 29, 2008, 16:30 »

+ отключить сортировку
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Май 29, 2008, 17:47 »

я думаю сигналы надо не отключать/подключать, а просто блокировать/разблокировать (см. bool QObject::blockSignals ( bool block ) )
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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