Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Kalombo от Май 20, 2008, 07:50



Название: Быстрая загрузка в виджет.
Отправлено: Kalombo от Май 20, 2008, 07:50
Мне нужно загрузить в какой-нибудь виджет (вообще, без разницы какой, я пробовал QListView и QListWidget) около 20 тысяч строк. Если никаких мер не предпринимать, то программ висит секунд 20 во воремя добавления этих строк. Пробовал вставить QApplication::processEvents(), время добавления увеличилось в разы(2 минуты ждал). Пробовал создать отдельным потоком, как-то странно получилось, приложение все равно начинало виснуть при добавлении. В идеале хочется, конечно, быстрого добавления слов, но если уж не получится, то скажите как оставить пользователю реакцию на сообщения, но только во время этих же 20 секунд, а не как у меня получилось больше 2х минут.


Название: Re: Быстрая загрузка в виджет.
Отправлено: lit-uriy от Май 20, 2008, 08:45
может, когда ты используешь QApplication::processEvents() имеет смысл вставку гигантскую обрамить с помощью setUpdatesEnabled(false); и setUpdatesEnabled(true); ?


Название: Re: Быстрая загрузка в виджет.
Отправлено: BRE от Май 20, 2008, 09:03
Для таких случаев, сам Бог велел, использовать модели.  ;)


Название: Re: Быстрая загрузка в виджет.
Отправлено: ритт от Май 20, 2008, 10:39
листвиджет заменить на листвью со своей моделью
в моделях ещё есть такая ерундовина "фетчМоре" (или как-то так)
плюс отдельный поток можно заставить эту модель заливать...а вьюху обновлять "пачками"

зы. будет интересно послушать как решил проблему (когда/если решишь)


Название: Re: Быстрая загрузка в виджет.
Отправлено: sikuda от Май 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



Название: Re: Быстрая загрузка в виджет.
Отправлено: pastor от Май 29, 2008, 16:30
+ отключить сортировку


Название: Re: Быстрая загрузка в виджет.
Отправлено: lit-uriy от Май 29, 2008, 17:47
я думаю сигналы надо не отключать/подключать, а просто блокировать/разблокировать (см. bool QObject::blockSignals ( bool block ) )