Russian Qt Forum

Qt => Вопросы новичков => Тема начата: once_again_abc от Март 19, 2012, 07:42



Название: QListWidget - 100000 строк за пол секунды?
Отправлено: once_again_abc от Март 19, 2012, 07:42
как добавить 100000 текстовых строк длиной не более 128 символов за полсекунды в стандартный QListWidget? Это вообще возможно? "в лоб" не получается - виджет не выдерживает такой нагрузки и умирает с громкими криками.


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: LisandreL от Март 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;
Перерисовка некоторое время занимает, но никакого намёка на умирание.
Рассказывайте, что за крики.


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: once_again_abc от Март 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;
Перерисовка некоторое время занимает, но никакого намёка на умирание.
Рассказывайте, что за крики.

кажется уже нашел в чем проблема. я пытался добавить айтем из рабочего потока...


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: BRE от Март 19, 2012, 08:36
Про использования моделей уже писали?


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: LisandreL от Март 19, 2012, 08:45
Про использования моделей уже писали?
Нет, конечно. Вопрос же про QListWidget. Зачем отвечать про QListView?


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: Vass от Март 19, 2012, 08:52
Чтобы небыло багов перерисовки юзайте известный хак,
widget->hide();
добавляем свои 100000 строк
widget->show();

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


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: Bepec от Март 19, 2012, 09:00
А виджет при таком хаке мигать противно не будет?


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: BRE от Март 19, 2012, 09:04
Нет, конечно. Вопрос же про QListWidget. Зачем отвечать про QListView?
А жаль, для таких объемов очень хорошо. ;)


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: Bepec от Март 19, 2012, 09:08
Конечн по хорошему автору бы посоветовать QListView. Но если ему надо "ещё вчера", то это будет бесполезный совет :)


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: once_again_abc от Март 19, 2012, 09:25
Чтобы небыло багов перерисовки юзайте известный хак,
widget->hide();
добавляем свои 100000 строк
widget->show();

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

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


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: once_again_abc от Март 19, 2012, 09:25
Конечн по хорошему автору бы посоветовать QListView. Но если ему надо "ещё вчера", то это будет бесполезный совет :)

эт точно... спешка как всегда


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: Vass от Март 19, 2012, 10:28
А виджет при таком хаке мигать противно не будет?
Противно мигает он как раз когда не прячешь его.

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

Что вы имеете ввиду?
Сделать setEnabled(false);?
Никогда не пробовал, но выглядит разумной идеей.


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: _OLEGator_ от Март 19, 2012, 10:46
Код
C++ (Qt)
void QWidget::setUpdatesEnabled ( bool enable )

а лучше конечно использовать QListView.


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: Alex Custov от Март 19, 2012, 14:52
Чтобы небыло багов перерисовки юзайте известный хак,
widget->hide();
добавляем свои 100000 строк
widget->show();

FACEPALM

http://doc.qt.nokia.com/4.8/qwidget.html#updatesEnabled-prop


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: Vass от Март 19, 2012, 20:37
FACEPALM

Да-да я уже понял, ну вот не знал я об этом свойстве.


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: once_again_abc от Март 20, 2012, 02:46
Чтобы небыло багов перерисовки юзайте известный хак,
widget->hide();
добавляем свои 100000 строк
widget->show();

FACEPALM

http://doc.qt.nokia.com/4.8/qwidget.html#updatesEnabled-prop

FACEPALM тут совсем не по делу. вы знаете все свойства всех классов Qt?


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: GreatSnake от Март 20, 2012, 10:13
FACEPALM тут совсем не по делу. вы знаете все свойства всех классов Qt?
Может и по делу. Всё-таки Vass "Qt Certified Specialist", а предлагает очевидную чушь. К тому же это свойство, имхо, "специалист" должен знать)

Насчёт QListWidget...
Если включена сортировка, то её нужно отрубать или вообще использовать
Код
C++ (Qt)
void QListWidget::addItems ( const QStringList & labels )


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: Alex Custov от Март 20, 2012, 14:31
FACEPALM тут совсем не по делу. вы знаете все свойства всех классов Qt?

Нет, конечно. Но такие классы как QObject или QWidget нужно знать вдоль и поперёк. А иначе как?


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: once_again_abc от Март 21, 2012, 04:40
Насчёт QListWidget...
Если включена сортировка, то её нужно отрубать или вообще использовать
Код
C++ (Qt)
void QListWidget::addItems ( const QStringList & labels )

спасибо за идею!


Название: Re: QListWidget - 100000 строк за пол секунды?
Отправлено: Авварон от Март 21, 2012, 08:56
Хоспади, за 2 дня можно было 5 моделей написать, чем мусолить тему на форуме.