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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Очень медленный QTreeWidgetItem::setSelected  (Прочитано 3945 раз)
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


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


Просмотр профиля
« : Июнь 21, 2011, 18:21 »

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

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

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июнь 21, 2011, 18:33 »

Цитировать
отсылку сигналов блокировал
И для QTreeWidget::selectionModel() тоже?

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

Qt 5.11/4.8.7 (X11/Win)
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


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


Просмотр профиля
« Ответ #2 : Июнь 21, 2011, 19:04 »

Для такого количества элементов не мешало бы перейти на QTreeView.
Ну допустим, что я перешёл. Как для QTreeView такой селект быстро сделать?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Июнь 21, 2011, 19:08 »

Цитировать
отсылку сигналов блокировал
И для QTreeWidget::selectionModel() тоже?
А чего на это не отвечаешь?
Записан

Qt 5.11/4.8.7 (X11/Win)
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


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


Просмотр профиля
« Ответ #4 : Июнь 21, 2011, 19:32 »

А чего на это не отвечаешь?
Код на работе. Сейчас тестовую програмку набросаю и отвечу.

UPD. ui->treeWidget->selectionModel()->blockSignals( true ); не даёт изменений по времени.
« Последнее редактирование: Июнь 21, 2011, 19:47 от LisandreL » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


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


Просмотр профиля
« Ответ #5 : Июнь 22, 2011, 08:56 »

Сделал то, что хотел, через QItenSelectionModel. Код сложнее, зато работает значительно шустрее, чем через QTreeWidgetItem::setSelected.
« Последнее редактирование: Июнь 22, 2011, 09:16 от LisandreL » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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