Russian Qt Forum

Qt => Общие вопросы => Тема начата: LisandreL от Июнь 21, 2011, 18:21



Название: Очень медленный QTreeWidgetItem::setSelected
Отправлено: LisandreL от Июнь 21, 2011, 18:21
Есть QTreeWidget.
Необходимо выделить одно или несколько поддеревьев, щёлкая по их вершинам.
Казалось бы обойди поддеревья и выстави у всех элементов setSelected( true ), но время работы уже на 5000 элементах оказывается совершенно неприличной. Причём если вместо setSelected использовать setChecked или setBackground, то всё работает заметно быстрее.
Возможно ли как-то ускорить этот процесс? Как-то выделять много элементов за раз, а не по одному?

Дополнительные сведения:
1) Win 7 x86/64, Qt 4.7.3 MinGW
2) перерисовку отключал, отсылку сигналов блокировал
3) выделение - Extended


Название: Re: Очень медленный QTreeWidgetItem::setSelected
Отправлено: GreatSnake от Июнь 21, 2011, 18:33
Цитировать
отсылку сигналов блокировал
И для QTreeWidget::selectionModel() тоже?

Для такого количества элементов не мешало бы перейти на QTreeView.


Название: Re: Очень медленный QTreeWidgetItem::setSelected
Отправлено: LisandreL от Июнь 21, 2011, 19:04
Для такого количества элементов не мешало бы перейти на QTreeView.
Ну допустим, что я перешёл. Как для QTreeView такой селект быстро сделать?


Название: Re: Очень медленный QTreeWidgetItem::setSelected
Отправлено: GreatSnake от Июнь 21, 2011, 19:08
Цитировать
отсылку сигналов блокировал
И для QTreeWidget::selectionModel() тоже?
А чего на это не отвечаешь?


Название: Re: Очень медленный QTreeWidgetItem::setSelected
Отправлено: LisandreL от Июнь 21, 2011, 19:32
А чего на это не отвечаешь?
Код на работе. Сейчас тестовую програмку набросаю и отвечу.

UPD. ui->treeWidget->selectionModel()->blockSignals( true ); не даёт изменений по времени.


Название: Re: Очень медленный QTreeWidgetItem::setSelected
Отправлено: LisandreL от Июнь 22, 2011, 08:56
Сделал то, что хотел, через QItenSelectionModel. Код сложнее, зато работает значительно шустрее, чем через QTreeWidgetItem::setSelected.