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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Очень медленный QTreeWidgetItem::setSelected  (Прочитано 4046 раз)
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.045 секунд. Запросов: 23.