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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QListWidget - 100000 строк за пол секунды?  (Прочитано 9251 раз)
once_again_abc
Гость
« : Март 19, 2012, 07:42 »

как добавить 100000 текстовых строк длиной не более 128 символов за полсекунды в стандартный QListWidget? Это вообще возможно? "в лоб" не получается - виджет не выдерживает такой нагрузки и умирает с громкими криками.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


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


Просмотр профиля
« Ответ #1 : Март 19, 2012, 08:07 »

"в лоб" не получается - виджет не выдерживает такой нагрузки и умирает с громкими криками.
С чего бы ему умирать?
Код
C++ (Qt)
   qint64 time = QDateTime::currentMSecsSinceEpoch();
   for ( int var = 0; var < 100500; ++var )
   {
       ui->listWidget->addItem( "Item #" + QString::number( var + 1 ) );
   }
   qDebug() << QDateTime::currentMSecsSinceEpoch() - time;
Перерисовка некоторое время занимает, но никакого намёка на умирание.
Рассказывайте, что за крики.
Записан
once_again_abc
Гость
« Ответ #2 : Март 19, 2012, 08:08 »

"в лоб" не получается - виджет не выдерживает такой нагрузки и умирает с громкими криками.
С чего бы ему умирать?
Код
C++ (Qt)
   qint64 time = QDateTime::currentMSecsSinceEpoch();
   for ( int var = 0; var < 100500; ++var )
   {
       ui->listWidget->addItem( "Item #" + QString::number( var + 1 ) );
   }
   qDebug() << QDateTime::currentMSecsSinceEpoch() - time;
Перерисовка некоторое время занимает, но никакого намёка на умирание.
Рассказывайте, что за крики.

кажется уже нашел в чем проблема. я пытался добавить айтем из рабочего потока...
Записан
BRE
Гость
« Ответ #3 : Март 19, 2012, 08:36 »

Про использования моделей уже писали?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


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


Просмотр профиля
« Ответ #4 : Март 19, 2012, 08:45 »

Про использования моделей уже писали?
Нет, конечно. Вопрос же про QListWidget. Зачем отвечать про QListView?
Записан
Vass
Гость
« Ответ #5 : Март 19, 2012, 08:52 »

Чтобы небыло багов перерисовки юзайте известный хак,
widget->hide();
добавляем свои 100000 строк
widget->show();

экономим 100000 перерисовок. (дада именно 100000, потому что скролл бар он все равно будет пересчитывать дяже для невидимых элементов.)
Записан
Bepec
Гость
« Ответ #6 : Март 19, 2012, 09:00 »

А виджет при таком хаке мигать противно не будет?
Записан
BRE
Гость
« Ответ #7 : Март 19, 2012, 09:04 »

Нет, конечно. Вопрос же про QListWidget. Зачем отвечать про QListView?
А жаль, для таких объемов очень хорошо. Подмигивающий
Записан
Bepec
Гость
« Ответ #8 : Март 19, 2012, 09:08 »

Конечн по хорошему автору бы посоветовать QListView. Но если ему надо "ещё вчера", то это будет бесполезный совет Улыбающийся
Записан
once_again_abc
Гость
« Ответ #9 : Март 19, 2012, 09:25 »

Чтобы небыло багов перерисовки юзайте известный хак,
widget->hide();
добавляем свои 100000 строк
widget->show();

экономим 100000 перерисовок. (дада именно 100000, потому что скролл бар он все равно будет пересчитывать дяже для невидимых элементов.)

лучше отключить сво-во перерисовки.
... у списка.
Записан
once_again_abc
Гость
« Ответ #10 : Март 19, 2012, 09:25 »

Конечн по хорошему автору бы посоветовать QListView. Но если ему надо "ещё вчера", то это будет бесполезный совет Улыбающийся

эт точно... спешка как всегда
Записан
Vass
Гость
« Ответ #11 : Март 19, 2012, 10:28 »

А виджет при таком хаке мигать противно не будет?
Противно мигает он как раз когда не прячешь его.

лучше отключить сво-во перерисовки.
... у списка.

Что вы имеете ввиду?
Сделать setEnabled(false);?
Никогда не пробовал, но выглядит разумной идеей.
Записан
_OLEGator_
Гость
« Ответ #12 : Март 19, 2012, 10:46 »

Код
C++ (Qt)
void QWidget::setUpdatesEnabled ( bool enable )

а лучше конечно использовать QListView.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #13 : Март 19, 2012, 14:52 »

Чтобы небыло багов перерисовки юзайте известный хак,
widget->hide();
добавляем свои 100000 строк
widget->show();

FACEPALM

http://doc.qt.nokia.com/4.8/qwidget.html#updatesEnabled-prop
« Последнее редактирование: Март 19, 2012, 14:55 от Alex Custov » Записан
Vass
Гость
« Ответ #14 : Март 19, 2012, 20:37 »

FACEPALM

Да-да я уже понял, ну вот не знал я об этом свойстве.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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